将std::string转换为uint16_t*
Convert std::string to uint16_t*
我已经将一些数据序列化到一个ostream中,以便通过设备文件发送。,二进制格式。
当打印ostream的内容时,我得到了这样的输出,这很好。
现在我需要使用某种算法来计算校验和:
由于我使用的是文件流,所以我有字符串格式的二进制数据:
例如:
46774101101140410MyMakeMyModel10000…
我想用算法计算校验和。。
就像
校验和是通过所有16位字的2的互补相加来计算的
在奇数个八位字节的情况下,最后的八位字节假定为MSB中填充的16位0。
我正在研究解决方案,请建议一个防傻的方法输入是字符串或字符*
感谢
您的代码通过打破严格的别名规则来引发未定义的行为。如果您不能确定data
所指向的数据是否与uint16_t
正确对齐,那么这甚至可能成为一个实际问题(正如Kerrek在评论中提到的那样)。
对于string
,您必须将内容复制到uint16_t
-数组中,然后从那里开始工作
它可能看起来像这样:
std::string str;
// Put some data into str
std::vector<std::uint16_t> array((str.size() + sizeof(std::uint16_t) - 1) / sizeof std::uint16_t);
std::copy_n(str.data(), str.size(), reinterpret_cast<char*>(&array[0]));
// Work with array
您在这里的主要困难似乎是将std::string
转换为整数。您可以使用std::string::substr
将字符串分成任意大小的块,并将每个块转换为一个整数。
这个问题中的代码可能显示了这种方法。
相关文章:
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中使用nlohmann从类到json的转换
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 从值小于256的uint16到uint8的Endian安全转换
- 将 uint16 转换为 WMI Variant for CreateSnapshot 方法
- 将字符 * 转换为 uint16 和 uint32
- 将 const uint16 arr[] 转换为 uint16 arr[]
- 将 QString 转换为 uint16*
- 将 UInt16* 转换为字符
- 将 uint16 dicom 映像转换为 qimage
- c# P-Invoke:如何转换INT fun(BYTE *bStream, UINT16 *nCount, const