0

我有一堆存储为 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,但我认为这不适用于十六进制。

4

5 回答 5

3

由于您期望每个值 < 255,并且在您发布的示例数据中只设置了最高字节,因此您的字节序似乎混淆了 - 您加载了一个大字节序数,然后将其解释为小字节序,反之亦然,导致字节顺序错误。

例如,假设我们将数字 104 以 32 位存储在大端机器上。在内存中,字节将是:00 00 00 68。如果您将其加载到小端机器上的内存中,这些字节将被解释为 68000000。

你从哪里得到的数字?您是否需要将它们转换为机器字节顺序?

于 2009-08-26T00:14:55.523 回答
2

Objective C本质上是C,上面有额外的东西。您通常的位移操作(my_int >> 24 或其他)应该可以工作。

于 2009-08-26T00:27:01.010 回答
1

这绝对听起来像一个字节顺序问题。不管是不是这样,简单的位移都应该可以完成这项工作:

uint32_t saneValue = insaneValue >> 24;
于 2009-08-26T02:46:07.797 回答
0

除以 0x1000000 应该有效(即,除以 16^6 = 2^24,而不是 10^6)。这与将位右移 24 位相同(我不知道 ObjC 语法,抱歉)。

于 2009-08-26T00:20:49.100 回答
0

尝试使用该功能NSSwapInt(),即

int x = 0x12345678;
x = NSSwapInt(x);
NSLog (@"%x", x);

应打印“78563412”。

于 2009-08-26T00:24:46.250 回答