我知道你可以通过使用获得第一个字节
int x = number & ((1<<8)-1);
或者
int x = number & 0xFF;
但我不知道如何获取整数的第 n 个字节。例如,1234 是 00000000 00000000 00000100 11010010 作为 32 位整数我怎样才能获得所有这些字节?第一个是 210,第二个是 4,最后两个是 0。
int x = (number >> (8*n)) & 0xff;
其中 n 第一个字节为 0,第二个字节为 1,以此类推。
对于第 (n+1) 个字节,它们以它们出现在内存中的任何顺序出现(在 x86 等小端机器上也是最不重要到最重要的):
int x = ((unsigned char *)(&number))[n];
对于大端机器上从最低到最高有效的第 (n+1) 个字节:
int x = ((unsigned char *)(&number))[sizeof(int) - 1 - n];
对于从最低到最高有效(任何字节序)的第 (n+1) 个字节:
int x = ((unsigned int)number >> (n << 3)) & 0xff;
当然,这些都假设n
< sizeof(int)
,那number
是一个int
.
int nth = (number >> (n * 8)) & 0xFF;
将其携带到最低字节中,并以“熟悉”的方式进行。
如果你想要一个字节,更好的解决方案不是:
byte x = (byte)(number >> (8 * n));
这样,您将返回并处理一个字节而不是一个 int,因此我们使用的内存更少,并且我们不必执行二进制和操作& 0xff
来将结果屏蔽为一个字节。我还看到提出问题的人在他们的示例中使用了 int ,但这并不正确。
我知道这个问题很久以前就被问过了,但我刚刚遇到了这个问题,我认为无论如何这是一个更好的解决方案。