4

我有一个CFBitVector看起来像'100000000000000' 我将字节数组传递给 的CFBitVectorGetBits,然后包含来自 this 的值CFBitVector。在这个电话之后,bytes[2]看起来像:

bytes[0] == '0x80'
bytes[1] == '0x00'

这正是我所期望的。但是,当将 的内容复制bytes[2]unsigned int bytesValue,128时,它应该是32768. 十进制值128由十六进制值表示0x0080。从本质上讲,执行时字节顺序似乎是颠倒的memcpy。这里发生了什么?这只是字节顺序的问题吗?

谢谢

CFMutableBitVectorRef bitVector = CFBitVectorCreateMutable(kCFAllocatorDefault, 16);
CFBitVectorSetCount(bitVector, 16);

CFBitVectorSetBitAtIndex(bitVector, 0, 1);

CFRange range = CFRangeMake(0, 16);
Byte bytes[2] = {0,0};
unsigned int bytesValue = 0;

CFBitVectorGetBits(bitVector, range, bytes);
memcpy(&bytesValue, bytes, sizeof(bytes));

return bytesValue;
4

1 回答 1

5

这里发生了什么?这只是字节顺序的问题吗?

是的。

你的电脑是小端的。16 位值32768将在内存中表示为:

00 80

在一个小端机器上。你有:

80 00

相反,如您所见,代表 128。

于 2013-07-02T20:20:08.603 回答