Извлеките первые две цифры HEX (UINT32 *) и преобразуйте в Int
-
19-09-2019 - |
Вопрос
У меня есть куча шестнадцатеричных значений, хранящихся как 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, но я не думаю, что это работает в HEX.
Решение
Цель C по существу C с дополнительными вещами сверху. Ваши обычные операции битов (my_int >> 24 или что-то еще) должны работать.
Другие советы
Поскольку вы ожидаете <255 за каждое значение, и только самый высокий байт установлен в опубликованных вами данных, похоже, ваш эндсианство смешан - вы загрузили большой номер эндьяна, а затем интерпретировали его как маленький эндиан, или наоборот, вызывая порядок байтов в неправильном порядке.
Например, предположим, что у нас было число 104, хранящихся в 32-битных на большую эндианскую машину. В памяти байты будут: 00 00 00 68. Если бы вы загрузили это в память на маленькой эндийской машине, эти байты будут интерпретироваться как 68000000.
Откуда вы взяли цифры? Вам нужно преобразовать их в заказ на машине?
Это абсолютно звучит как проблема эндсианности. Независимо от того, есть ли это, простое изменение бита должно выполнять работу:
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».