c得到整数的第n个字节

时间:2011-10-16 21:21:50

标签: c byte shift bit-shift

我知道你可以使用

获得第一个字节
int x = number & ((1<<8)-1);

int x = number & 0xFF;

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

4 个答案:

答案 0 :(得分:68)

int x = (number >> (8*n)) & 0xff;

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

答案 1 :(得分:13)

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

int x = ((unsigned char *)(&number))[n];

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

int x = ((unsigned char *)(&number))[sizeof(int) - 1 - n];

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

int x = ((unsigned int)number >> (n << 3)) & 0xff;

当然,这些都假设n&lt; sizeof(int)numberint

答案 2 :(得分:2)

int nth = (number >> (n * 8)) & 0xFF;

将其带入最低字节并以“熟悉”的方式进行。

答案 3 :(得分:-1)

如果您想要一个字节,更好的解决方案是:

byte x = (byte)(number >> (8 * n));

这样,您将返回并处理一个字节而不是一个int,因此我们使用的内存更少,并且我们不必执行二进制和操作& 0xff只是为了掩盖结果直到一个字节。我还看到提出问题的人在示例中使用了int,但这并不正确。

我知道这个问题是很久以前问过的,但是我只是遇到了这个问题,无论如何我认为这是一个更好的解决方案。