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,等等.
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.