我正在制作一个从服务器下载32位整数的应用程序,并将第一个16位和第二个16位用于不同目的...
我负责第二个16bit,应该用来形成一个int,我知道我应该用bitwise操作来做这个,但是无法实现,下面是我正在使用的代码,请给我更多信息
//CID is a 32bit integer, in nslog it shows as 68913219 - its different for every user
Byte lowByte = (CID>>16)&0xFF; //the 3rd byte
Byte highByte = (CID>>24)&0xFF; //the 4th byte
uint16_t value = lowByte & highByte; //combine, but the result is 0.
答案 0 :(得分:4)
uint16_t value = lowByte & highByte; //combine, but the result is 0.
这不是你将两个字节合并为一个uint16_t
的方式:你AND
将它们放在适当位置,而你需要移位高字节,OR
它与低字节:
uint16_t value = lowByte | (((uint16_t)highByte) << 8);
然而,就可读性而言,这是次优的:如果你从一个32位整数开始,你需要删除高16位,你可以简单地移动16,并用0xFFFF
掩码 - 即与切出第三个字节的方式相同,但使用16位掩码。
答案 1 :(得分:0)
您不应该逐字节地执行此操作。试试这个:
//CID is a 32bit integer, in nslog it shows as 68913219 - its different for every user
uint16_t value = (CID>>16)&0xffff;
答案 2 :(得分:0)
您也可以使用NSData。
如果你有这个整数:
int i = 1;
您可以使用:
NSData *data = [NSData dataWithBytes: &i length: sizeof(i)];
然后,获得第二个16位:
int16_t recover;
[data getBytes: &recover range: NSMakeRange(2, 2)]
然后你的16位开启&#34;恢复&#34;。
也许这种方式不像位操作那么有效,但它更清晰。
:D