与えられた:
char data[10];
uint32_t value = 0x61626364; // 'abcd'
char *a = data;
*(a++) = (int)((value >> 24) & 0xFF);
*(a++) = (int)((value >> 16) & 0xFF);
*(a++) = (int)((value >> 8) & 0xFF);
*(a++) = (int)(value & 0xFF);
*(a++) = ':';
*((uint32_t *)a) = value;
a+=4;
*(a++) = 0;
printf("%s\n", data);
私は得ます(リトルエンディアンシステムであるインテルボックスで):
abcd:dcba
したがって、これにより、整数のバイトがプラットフォームに依存しない形式 (バイト形式としてビッグ エンディアンを選択) になることが保証されます。
今、次の場合:
*(a++) = (int)((value >> 16) & 0xFF);
我々は持っています:
0x61626364 -- value
0x00006162 -- value >> 16 : shifted 2 bytes
0x00000062 -- (value >> 16) & 0xFF : last byte only