Я должен задать вопрос о 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"
является значением заполнителя. Моя настоящая строка — не числовая текстовая информация.
Глядя на заголовок, 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");
Вы были почти там,
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);
Если 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;
}
Надеюсь это поможет:)