![](/img/trans.png)
[英]How to reconstruct a 4 byte uint8 array into a uint32 integer
[英]Converting a UINT32 value into a UINT8 array[4]
我的問題是,如何以獨立於字節序的方式將UINT32值轉換為UINT8數組[4](C / C ++)? 另外,如何從UINT8數組[4]重建UINT32值,以返回到起點?
您尚未真正說出獨立於字節序的含義-不清楚,因為字節數組必須具有某些字節序。 這就是說,對下面的一個必須回答您的要求:
給定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];
要么:
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;
例如:
UINT32 value;
UINT8 result[4];
result[0] = (value & 0x000000ff);
result[1] = (value & 0x0000ff00) >> 8;
result[2] = (value & 0x00ff0000) >> 16;
result[3] = (value & 0xff000000) >> 24;
編輯:添加了括號(>>似乎比&的優先級更高)
一個人也可以用指針做到這一點。 (這是小端序,但是如果使用相同的重建方法就沒關系了)
uint32 in = 0x12345678;
uint8 out[4];
*(uint32*)&out = in;
這將uint32的值分配給uint8的內存地址之后的4個字節,從而完全滿足您的需要。
換一種方式:
uint8 in[4] = {0x78, 0x56, 0x34, 0x12};
uint32 out;
out = *(uint32*)&in
使用由4個時間uint8和uint32組成的數組組成的Union。
因此它會根據c固有的指針Magic自動排序(數組是指向數組開頭的指針)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.