如何将 uint64_t
转换为 uint8_t[8]
而不会丢失 C++ 中的信息?
我尝试了以下方法:
uint64_t number = 23425432542254234532;
uint8_t result[8];
for(int i = 0; i < 8; i++) {
std::memcpy(result[i], number, 1);
}
原文由 Jannik Becher 发布,翻译遵循 CC BY-SA 4.0 许可协议
如何将 uint64_t
转换为 uint8_t[8]
而不会丢失 C++ 中的信息?
我尝试了以下方法:
uint64_t number = 23425432542254234532;
uint8_t result[8];
for(int i = 0; i < 8; i++) {
std::memcpy(result[i], number, 1);
}
原文由 Jannik Becher 发布,翻译遵循 CC BY-SA 4.0 许可协议
你快到了。首先,文字 23425432542254234532
太大而无法放入 uint64_t
。
其次,从文档中可以看出, std::memcpy
具有以下声明:
void * memcpy ( void * destination, const void * source, size_t num );
如您所见,它以指针(地址)作为参数。不是 uint64_t
,也不是 uint8_t
。您可以使用 address-of 运算符轻松获取整数的地址。
第三,您只是将整数的第一个字节复制到每个数组元素中。您需要在每次迭代中增加输入指针。但是循环是不必要的。您可以像这样一次性复制所有字节:
std::memcpy(result, &number, sizeof number);
请务必意识到字节的顺序取决于 cpu 的 字节序。
原文由 eerorika 发布,翻译遵循 CC BY-SA 3.0 许可协议
2 回答1.7k 阅读✓ 已解决
2 回答1k 阅读✓ 已解决
1 回答1.6k 阅读✓ 已解决
1 回答1.1k 阅读✓ 已解决
1 回答931 阅读
1 回答1.1k 阅读
2 回答1.1k 阅读
如果我理解正确,您可以这样做,例如: