![](/img/trans.png)
[英]string size after converting const unsigned char[] to std::string
[英]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 作为char
或unsigned char
访问,但它不允许像访问其他任何内容一样访问char
或unsigned char
。
问题是如何将二进制数据存储到标准字符串? 如果您只是使用构造函数,则可以通过 xyz.data() 获取二进制数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.