Chr*_*ris 13 c c++ endianness
我的问题是如何将UINT32值转换为UINT8数组[4](C/C++),最好是以独立于字节序的方式?另外,如何从UINT8数组[4]重建UINT32值,以回到你开始的位置?
Aln*_*tak 19
你没有真正说出你的意思是独立于字节序 - 由于字节数组必须有一些字节序,所以不清楚.这就是说,一个的下方必须回答您的要求:
给定UINT32 v
和UINT8 a[4]
:
(使用机器的本机字节顺序):
UINT8 *vp = (UINT8 *)&v;
a[0] = vp[0];
a[1] = vp[1];
a[2] = vp[2];
a[3] = vp[3];
Run Code Online (Sandbox Code Playgroud)
要么:
memcpy(a, &v, sizeof(v));
Run Code Online (Sandbox Code Playgroud)
要么:
*(UINT32 *)a = v;
Run Code Online (Sandbox Code Playgroud)
(又名"网络秩序"):
a[0] = v >> 24;
a[1] = v >> 16;
a[2] = v >> 8;
a[3] = v;
Run Code Online (Sandbox Code Playgroud)
a[0] = v;
a[1] = v >> 8;
a[2] = v >> 16;
a[3] = v >> 24;
Run Code Online (Sandbox Code Playgroud)
Pat*_*ick 12
像这样:
UINT32 value;
UINT8 result[4];
result[0] = (value & 0x000000ff);
result[1] = (value & 0x0000ff00) >> 8;
result[2] = (value & 0x00ff0000) >> 16;
result[3] = (value & 0xff000000) >> 24;
Run Code Online (Sandbox Code Playgroud)
编辑:添加括号(>>似乎优先于&)
归档时间: |
|
查看次数: |
41469 次 |
最近记录: |