从 std::string 转换为 const 无符号整数
Converting from std::string to const unsigned int
我的有效负载存储在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
。
问题是如何将二进制数据存储到 std 字符串?如果你只是使用构造函数,你可以通过xyz.data((获取二进制数据。
- 如何打印boost多精度128位无符号整数
- C++模板函数,用于比较任何无符号整数和有符号整数
- 使用 fopen 打开 .pak 文件并使该文件应用于 const 无符号字符* (C++)
- 在线程中读取无符号整数时,c++ 位是否以原子方式切换?
- Constexpr 可变参数模板,用于对无符号整数进行重新排序
- 为什么 Clang 和 GCC 中两个无符号整数之和的结果类型不同
- 从 std::string 转换为 const 无符号整数
- 迭代器和无符号整数的重载 + 运算符
- C++,概念不适用于无符号整数作为结果类型?
- 在C++中,将无符号整数转换为八进制表示,反之亦然的最佳方法是什么
- 原子式清除无符号整数的最低非零位
- 计算机使用什么方法添加无符号整数
- boost::任何带有结构体和无符号整数
- 添加有符号和无符号整数
- 如何安全地比较两个无符号整数计数器?
- 计算 (64 位无符号整数) * (64 位无符号整数) 的商除以 2^64
- 如何将 32 位无符号整数分配给包含 32 位的位字段
- 如何将以"\0"开头的字符 * 转换为无符号整数?
- *(易失性无符号整数 *) 的含义 0x00 = 0x00;
- 基本级别的映射,"此常量表达式的类型为"const char*",而不是所需的"无符号整数"类型