我有一堆十六进制值存储为UInt32 *
当我按原样转换为int时,我认为当它们应该是0-255时,它们是疯狂的值。我想我只需要提取前两位数字。我该怎么做呢?我尝试除以1000000,但我认为它不适用于十六进制。
答案 0 :(得分:3)
因为你期待<对于每个值只有255,并且在您发布的样本数据中只设置了最高字节,看起来您的endianness混淆了 - 您加载了一个大端数字,然后将其解释为小端,反之亦然,导致字节顺序错误。
例如,假设我们在大端机器上以32位存储了数字104。在内存中,字节数为:00 00 00 68.如果将其加载到小端机器上的内存中,则这些字节将被解释为68000000。
你从哪里得到数字?你需要将它们转换为机器字节顺序吗?
答案 1 :(得分:2)
目标C基本上是C,顶部有额外的东西。您通常的位移操作(my_int>> 24或其他)应该有效。
答案 2 :(得分:1)
这听起来像是一个字节序问题。无论是否,简单的位移应该做的工作:
uint32_t saneValue = insaneValue >> 24;
答案 3 :(得分:0)
除以0x1000000应该有效(即16 ^ 6 = 2 ^ 24,而不是10 ^ 6)。这与将位向右移动24相同(我不知道ObjC语法,对不起)。
答案 4 :(得分:0)
尝试使用函数NSSwapInt()
,即
int x = 0x12345678;
x = NSSwapInt(x);
NSLog (@"%x", x);
应打印“78563412”。