c得到整数的第n个字节

Kam*_*224 33 c byte bit-shift shift

我知道你可以通过使用获得第一个字节

int x = number & ((1<<8)-1);
Run Code Online (Sandbox Code Playgroud)

要么

int x = number & 0xFF;
Run Code Online (Sandbox Code Playgroud)

但我不知道如何获得整数的第n个字节.例如,1234是00000000 00000000 00000100 11010010作为32位整数如何获得所有这些字节?第一个是210,第二个是4,最后两个是0.

Vau*_*ato 71

int x = (number >> (8*n)) & 0xff;
Run Code Online (Sandbox Code Playgroud)

其中n对于第一个字节为0,对于第二个字节为1,等等.

  • 请使用括号!我永远不会成员`>>`或`*`是否具有更高的优先权. (14认同)

Dmi*_*tri 15

对于第(n + 1)个字节,它们以任何顺序出现在内存中(在x86等小端机器上也是最不重要的):

int x = ((unsigned char *)(&number))[n];
Run Code Online (Sandbox Code Playgroud)

对于big-endian机器上从最小到最重要的第(n + 1)个字节:

int x = ((unsigned char *)(&number))[sizeof(int) - 1 - n];
Run Code Online (Sandbox Code Playgroud)

对于从最小到最重要的(第n + 1)个字节(任何字节序):

int x = ((unsigned int)number >> (n << 3)) & 0xff;
Run Code Online (Sandbox Code Playgroud)

当然,这些都假设n< sizeof(int),那number是一个int.