gpt4 book ai didi

c++ - 从 Byte * 到 unsigned int 的 memcpy 是反转字节顺序

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:46:02 26 4
gpt4 key购买 nike

我有一个 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;

最佳答案

What is going on here? Is this just an issue with endianness?

是的。

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

00 80

在小端机器上。你有:

80 00

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

关于c++ - 从 Byte * 到 unsigned int 的 memcpy 是反转字节顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17435115/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com