0

我得对 C++ 中的 Ice 提出疑问。我的一种方法要求我传入一个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"是占位符值。我的实际字符串是非数字文本信息。

4

3 回答 3

1

看表ByteSeq是一个别名vector<Byte>std::string您可以以通常的方式从 a 初始化它

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");
于 2013-11-12T14:45:07.477 回答
0

你快到了,

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);
于 2013-11-12T14:20:58.533 回答
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;
}

希望这可以帮助:)

于 2013-11-12T14:45:33.083 回答