我的有效载荷被存储在一个 std::string xyz
(保存二进制数据),我需要把它传递给一个函数,这个函数把它作为 const unsigned int*
. 我如何从 std::string
到 const unsigned int*
?
我试过了 reinterpret_cast<const unsigned int*>(&xyz.front())
但却无法使用!
函数原型如下。
void roll(void *pdst, const unsigned int *psrc);
pdst
将保存结果。
不要使用 std::string
来存储二进制数据,那个类是专门为处理字符串而设计的。 感觉原来有的C代码是用一个 char
数组来存储字节序列,并将其转换为 std::string
对于C++来说,它是一个字符串。 在这种情况下,它不是作为字符串使用的,所以将它存储在 std::string
.
从那里,翻译成一个 unsigned int
首先,即使你使用更原始的类型,如 char *
因为这将违反严格的别名规则,导致未定义的行为。 我们要做的是创建一个新的变量,然后在其中加入 memcpy
的数据到这个新变量中。
这里是C++14标准工作草案中描述兼容类型的部分(3.10 p10)。
如果一个程序试图通过以下类型以外的glvalue来访问一个对象的存储值,那么这个行为是未定义的。 54
- 对象的动态类型。
- 对象的动态类型的cv限定版本。
- 类似于对象动态类型的类型(如4.4中定义)。
- 对象动态类型对应的有符号或无符号类型。
- 对象动态类型的cv限定版本对应的有符号或无符号类型。
- 聚合体或联合体类型,在其元素或非静态数据成员中包括上述类型之一(包括递归的子聚合体或包含的联合体的元素或非静态数据成员)。
- 对象的动态类型的基类类型(可能是cv限定的)。
- 的char或unsigned char类型。
正如你所看到的,它明确地允许访问任何对象作为一个 char
或 unsigned char
但它并没有提供这样的准入许可。char
或 unsigned char
和其他任何东西一样。
问题是你如何将二进制数据存储为std字符串?如果你只是简单地使用构造函数,你可以通过xyz.data()获得二进制数据。