从 std::string 转换为 const 无符号整数

Converting from std::string to const unsigned int

本文关键字:const 无符号整数 string std 转换      更新时间:2023-10-16

我的有效负载存储在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 条件(,

— 一 煳 或 无符号字符 类型。

如您所见,它明确允许以charunsigned char访问任何对象,但它没有像其他任何东西一样允许访问charunsigned char

问题是如何将二进制数据存储到 std 字符串?如果你只是使用构造函数,你可以通过xyz.data((获取二进制数据。