访问整数的最后2个字节

时间:2010-07-22 20:09:04

标签: c++ c

我有一个包含整数和char的结构。我如何访问我的int的最后2个字节?

6 个答案:

答案 0 :(得分:10)

整数中的术语“最后一个字节”不清楚。你可能会想到两件事:

  • 最多/最少significant bytes
  • 整数以小endian形式编码的最后字节。字节顺序通常称为字节顺序。

在第一种情况下,使用(x& 0xffff)可以在大多数语言中访问最低有效字节。

在第二种情况下,您需要检查所需的字节顺序。例如,如果使用网络字节顺序,则最后一个字节是最低有效字节。在其他情况下,它可能是最后一个字节的最重要的字节。

答案 1 :(得分:5)

int i = // ?? get your int somehow
int lastTwoBytes = i & 0x0000FFFF;
int firstTwoBytes = (i >> 16) & 0x0000FFFF; // maybe you really want the first two?

答案 2 :(得分:4)

使用这样的联合可以让你得到一个整数的单个字节:

union {
    int           i;
    unsigned char bytes[sizeof(int)];
} int_bytes;

构成整数的字节究竟是多少取决于实现。

答案 3 :(得分:2)

假设您使用的是C / C ++,您可以使用以下内容:

struct {
  int myInt;
  char myChar;
} myStruct;

并想要这个:

lastTwoBytesOfInt = myStruct.myInt & 0x0000FFFF;

如果您还不了解按位操作,那么查看Wikipedia可能会帮助您理解按位操作。

另外,你可能会看一下Endianness,因为整数的“最后”字节是一个有点暧昧的术语。

答案 4 :(得分:1)

这是另一种访问高16位和低16位的方法(假设系统上的短位为16位):

unsigned int x = 0x12345678;
cout << hex << ((unsigned short*)&x)[0] << endl; // prints 5678
cout << hex << ((unsigned short*)&x)[1] << endl; // prints 1234

请注意,结果取决于系统的字节顺序。 http://en.wikipedia.org/wiki/Endianness

答案 5 :(得分:0)

在Windows上,您可以使用HiWord()/ LoWord()来访问第一个或最后两个字节。