Преобразование из строки в Ice :: ByteSeq

Я должен задать вопрос о Ice в C ++. Один из моих методов требует, чтобы я прошел Ice::ByteSeq, Я хотел бы построить это ByteSeq из строки Как это преобразование возможно?

Я попробовал варианты ниже.

Ice::ByteSeq("bytes")        // Invalid conversion to unsigned int
Ice::ByteSeq((byte*)"bytes") // Invalid conversion from byte* to unsigned int
(Ice::ByteSeq)"bytes"        // Invalid conversion from const char& to unsigned int
(Ice::ByteSeq)(unsigned int)atoi("bytes") // Blank (obviously, why did I try this?)

Как я могу сделать это?

РЕДАКТИРОВАТЬ

"bytes" является значением заполнителя. Моя настоящая строка — не числовая текстовая информация.

0

Решение

Глядя на заголовок, ByteSeq это псевдоним для vector<Byte>, Вы можете инициализировать это из std::string обычным способом

std::string s = "whatever";
Ice::ByteSeq bs(s.begin(), s.end());

или из строкового литерала с немного более плавным, например,

template <size_t N>
Ice::ByteSeq byteseq_from_literal(char (&s)[N]) {
return Ice::ByteSeq(s, s+N-1); // assuming you don't want to include the terminator
}

Ice::ByteSeq bs = byteseq_from_literal("whatever");
1

Другие решения

Вы были почти там,

Ice::ByteSeq((unsigned int)atoi("bytes"));

должен сделать это

Предполагая, что ваш Ice :: ByteSeq имеет конструктор, который принимает unsigned int

Чтобы разделить это, это в основном делает

int num = atoi("12345"); // num = (int) 12345
unsigned int num2 = (unsigned int)num;  // num2 = (unsigned int) 12345
Ice::ByteSeq(num2);
0

Если Ice::ByteSeq это просто вектор байтов, вы можете преобразовать строку в вектор байтов, выполнив следующие действия:

std::string str = "Hello World";
std::vector<char> bytes(str.begin(), str.end());

Реализация Ice::Byte является unsigned char просто измените стандартный код, с которого я писал:

std::vector<char> bytes(str.begin(), str.end());

в

std::vector<unsigned char> bytes(str.begin(), str.end());

и сгенерированный вектор должен быть напрямую совместим с Ice::ByteSeq

образец кода:

#include <iostream>
#include <vector>

using namespace std;

int main()
{
std::string str = "Hello World";
std::vector<unsigned char> bytes(str.begin(), str.end());
cout << str << endl;

for(int i=0; i < bytes.size(); i++)
std::cout << bytes[i] << '\n';
return 0;
}

Надеюсь это поможет:)

0
По вопросам рекламы [email protected]