繁体   English   中英

从 std::string 转换为 const unsigned int

[英]Converting from std::string to const unsigned int

我的有效负载存储在std::string xyz (保存二进制数据)中,我需要将其传递给 function ,将其作为const unsigned int* 如何从std::string转换为const unsigned int*

我尝试reinterpret_cast<const unsigned int*>(&xyz.front())但它不起作用!

function原型如下:

void roll(void *pdst, const unsigned int *psrc);

pdst将保存结果。

不要使用std::string存储二进制数据; class 专为使用字符串而设计。 感觉就像有原始的 C 代码使用char数组来存储字节序列并将其转换为std::string用于 C++。 在这种情况下,它没有被用作字符串,因此将其存储在std::string中是没有意义的。

从那里开始,转换为unsigned int ,对于初学者来说,即使您使用更原始的类型(例如char * )也不能简单地转换它,因为它会违反严格别名的规则,从而导致未定义的行为。 您要做的是创建一个新变量并将数据memcpy到这个新变量中。

这是 C++14 标准工作草案中描述兼容类型 (3.10 p10) 的部分:

如果程序尝试通过以下类型之一以外的泛左值访问 object 的存储值,则行为未定义:54

— object 的动态类型,

— object 的动态类型的 cv 合格版本,

— 与 object 的动态类型类似(如 4.4 中定义)的类型,

— 对应于 object 的动态类型的有符号或无符号类型,

— 有符号或无符号类型,对应于 object 的动态类型的 cv 限定版本,

— 在其元素或非 static 数据成员中包含上述类型之一的聚合或联合类型(递归地包括子聚合或包含联合的元素或非静态数据成员),

— 一种类型,它是 object 的动态类型的(可能是 cv 限定的)基本 class 类型,

— char 或 unsigned char 类型。

正如您所看到的,它明确允许将任何 object 作为charunsigned char访问,但它不允许像访问其他任何内容一样访问charunsigned char

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM