将 uint64_t 转换为 uint8_t\[8\]

新手上路,请多包涵

如何将 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 许可协议

阅读 1k
2 个回答

如果我理解正确,您可以这样做,例如:

 uint64_t number = 23425432542254234532;
uint8_t *p = (uint8_t *)&number;
//if you need a copy
uint8_t result[8];
for(int i = 0; i < 8; i++) {
    result[i] = p[i];
}

原文由 Rames 发布,翻译遵循 CC BY-SA 3.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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏