我有一堆存储为 UInt32* 的十六进制值
- 2009-08-25 17:09:25.597 粒子[1211:20b] 68000000
- 2009-08-25 17:09:25.598 粒子[1211:20b] A9000000
- 2009-08-25 17:09:25.598 粒子[1211:20b] 99000000
当我按原样转换为 int 时,我认为它们应该是 0-255 之间的疯狂值。我想我只需要提取前两位数字。我该怎么做呢?我尝试除以 1000000,但我认为这不适用于十六进制。
我有一堆存储为 UInt32* 的十六进制值
当我按原样转换为 int 时,我认为它们应该是 0-255 之间的疯狂值。我想我只需要提取前两位数字。我该怎么做呢?我尝试除以 1000000,但我认为这不适用于十六进制。
由于您期望每个值 < 255,并且在您发布的示例数据中只设置了最高字节,因此您的字节序似乎混淆了 - 您加载了一个大字节序数,然后将其解释为小字节序,反之亦然,导致字节顺序错误。
例如,假设我们将数字 104 以 32 位存储在大端机器上。在内存中,字节将是:00 00 00 68。如果您将其加载到小端机器上的内存中,这些字节将被解释为 68000000。
你从哪里得到的数字?您是否需要将它们转换为机器字节顺序?
Objective C本质上是C,上面有额外的东西。您通常的位移操作(my_int >> 24 或其他)应该可以工作。
这绝对听起来像一个字节顺序问题。不管是不是这样,简单的位移都应该可以完成这项工作:
uint32_t saneValue = insaneValue >> 24;
除以 0x1000000 应该有效(即,除以 16^6 = 2^24,而不是 10^6)。这与将位右移 24 位相同(我不知道 ObjC 语法,抱歉)。
尝试使用该功能NSSwapInt()
,即
int x = 0x12345678;
x = NSSwapInt(x);
NSLog (@"%x", x);
应打印“78563412”。