c++ - 将 UINT32 值转换为 UINT8 数组[4]

标签 c++ c endianness

我的问题是如何以独立于字节序的方式将 UINT32 值转换为 UINT8 数组 [4] (C/C++)?此外,您将如何从 UINT8 数组 [4] 重建 UINT32 值,以回到您开始的位置?

最佳答案

您还没有真正说出独立于字节序是什么意思-不清楚,因为字节数组必须具有一些字节序。也就是说,其中一个必须满足您的要求:

给定 UINT32 vUINT8 a[4]:

“主机”字节序

(使用机器的原生字节顺序):

UINT8 *vp = (UINT8 *)&v;
a[0] = vp[0];
a[1] = vp[1];
a[2] = vp[2];
a[3] = vp[3];

或:

memcpy(a, &v, sizeof(v));

或:

*(UINT32 *)a = v;

大端序

(又名“网络秩序”):

a[0] = v >> 24;
a[1] = v >> 16;
a[2] = v >>  8;
a[3] = v;

小端序

a[0] = v;
a[1] = v >>  8;
a[2] = v >> 16;
a[3] = v >> 24;

关于c++ - 将 UINT32 值转换为 UINT8 数组[4],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6499183/

相关文章:

c - 为什么我在 C 中使用 strtok 时不断收到编译器错误?

Java,在二进制文件输入中搜索 long,8 字节对齐,大端

c++ - 我的卫星绕行,但沿着非圆形路径(校正球面坐标数学)

C++ VS 工具集 141 - 142 转换的差异

c - 与一般内联相比,为什么 gnu_inline 属性对代码生成的影响如此之大?

字节顺序理论和概念

将字节数组转换为 uint64_t?

c++ - 使用stringstream从c++中的字符串中提取整数时出现意外重复

c++ - 没有系统或 IO 调用的 sleep

c - 这个 _popen/select 示例有什么问题?