c++ - 将 uint64_t 转换为 uint8_t[8]

标签 c++ boost

如何在不丢失 C++ 信息的情况下将 uint64_t 转换为 uint8_t[8]

我尝试了以下方法:

uint64_t number = 23425432542254234532;
uint8_t result[8];
for(int i = 0; i < 8; i++) {
    std::memcpy(result[i], number, 1);
}

最佳答案

你快到了。首先,文字 23425432542254234532 太大,无法放入 uint64_t

其次,从文档中可以看出,std::memcpy有以下声明:

void * memcpy ( void * destination, const void * source, size_t num );

如您所见,它以指针(地址)作为参数。不是 uint64_t,也不是 uint8_t。您可以使用寻址运算符轻松获取整数的地址。

第三,您只是将整数的第一个字节复制到每个数组元素中。您需要在每次迭代中增加输入指针。但是循环是不必要的。您可以像这样一次性复制所有字节:

std::memcpy(result, &number, sizeof number);

请注意字节顺序取决于 endianness CPU 的。

关于c++ - 将 uint64_t 转换为 uint8_t[8],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35153015/

相关文章:

c++ - 如果我的模板特化没有被执行,为什么它会被编译?

c++ - 对模板基类成员函数的 undefined reference

c++ - 如果我中断调试,Visual Studio 会释放内存吗?

c++ - 拥有字符串映射如何将其与给定字符串进行比较

c++ - BGL 自定义图 connected_components

c++ - 如何在代码块中启用 c++17 支持

C++ 避免三重指针

c++ - boost 程序选项在从命令行读取时更改数据(这是 boost 中的错误吗?)

c++ - 两个日期之间的月数 - 使用 boost 的日期

c++ - 带有 boost::any 的 cout 映射