gpt4 book ai didi

c++ - 将 std::string 转换为 uint16_t*

转载 作者:行者123 更新时间:2023-11-27 23:02:15 31 4
gpt4 key购买 nike

我已经将一些数据序列化到一个 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

关于c++ - 将 std::string 转换为 uint16_t*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26562105/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com