Objective c 提取十六进制的前两位数字(UInt32*)并转换为int

Objective c 提取十六进制的前两位数字(UInt32*)并转换为int,objective-c,hex,numbers,digits,Objective C,Hex,Numbers,Digits,我有一堆十六进制值存储为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*

  • 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,但我认为这在十六进制中不起作用。

因为您希望每个值小于255,并且在您发布的示例数据中只设置了最高字节,所以看起来您的值混淆了-您加载了一个大端数,然后将其解释为小端数,反之亦然,导致字节顺序错误

例如,假设我们将数字104存储在一台big-endian机器上的32位中。在内存中,字节将是:0068。如果将其加载到小型endian机器上的内存中,这些字节将被解释为68000000


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

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

例如,假设我们将数字104存储在一台big-endian机器上的32位中。在内存中,字节将是:0068。如果将其加载到小型endian机器上的内存中,这些字节将被解释为68000000


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

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

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

尝试使用函数
NSSwapInt()
,即

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

应打印“78563412”。

尝试使用函数
NSSwapInt()
,即

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

应该打印“78563412”。

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

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

这听起来绝对像是一个endianness问题。无论是否是,简单的位移位都应该起作用:

uint32_t saneValue = insaneValue >> 24;

这听起来绝对像是一个永恒的问题。无论是否是,简单的位移位都应该起作用:

uint32_t saneValue = insaneValue >> 24;