我有一个包含整数和char的结构。我如何访问我的int的最后2个字节?
答案 0 :(得分:10)
整数中的术语“最后一个字节”不清楚。你可能会想到两件事:
在第一种情况下,使用(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()来访问第一个或最后两个字节。