memcpy from Byte*to unsigned int是Reversing Byte Order

Bre*_*asy 4 c++ memory objective-c endianness memcpy

我有一个CFBitVector看起来像'100000000000000' 我传递字节数组CFBitVectorGetBits,然后包含从这里的值CFBitVector.通话结束后,bytes[2]看起来像:

bytes[0] == '0x80'
bytes[1] == '0x00'
Run Code Online (Sandbox Code Playgroud)

这正是我所期待的.但是,当将值的内容复制bytes[2]到应该的时候.十进制值由十六进制值表示.从本质上讲,执行时字节顺序似乎是相反的.这里发生了什么?这只是字节序的问题吗?unsigned int bytesValue,128327681280x0080memcpy

谢谢

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;
Run Code Online (Sandbox Code Playgroud)

Car*_*rum 5

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

是.

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

00 80
Run Code Online (Sandbox Code Playgroud)

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

80 00
Run Code Online (Sandbox Code Playgroud)

相反,正如你所看到的那样代表128.

  • 好吧,如果你愿意,可以在那里使用`ntohs`或`ntohl`调用将测试推送到系统."公平"是什么意思? (3认同)