memcpy from Byte * to unsigned int是Reversing Byte Order

时间:2013-07-02 20:18:24

标签: c++ objective-c memory endianness memcpy

我的CFBitVector看起来像'100000000000000' 我将字节数组传递给CFBitVectorGetBits,然后包含此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;

1 个答案:

答案 0 :(得分:5)

  

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

您的计算机是小端。 16位值32768将在内存中表示为:

00 80

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

80 00

相反,你看到的代表128.