2013-04-02 1 views
2

Я хочу преобразовать шестнадцатеричное число из файла в int.
Строка выглядит следующим образом:
\0\0\x05\xa0
Это должно быть 1440. Если я стараюсь:
int i = '\x05'
я 5.C convert hex values ​​" xHH" to integer

Но если я делаю то же самое с \xa0, я получаю -96.
Любые идеи как правильно преобразовать строку?

+1

Это настоящая текстовая строка или данные при просмотре в программе, которая может отображать двоичные данные? –

+1

Кроме того, '-96' является знаковым значением' 0xa0'. –

+0

На самом деле это PNG-заголовок. Я написал простую программу c, которая может считывать размер из PNG-изображения. –

ответ

2

Это выглядит как big-endian номер.

Если у вас есть четыре (а не 12, как если байты вы показавшие это строка, я предполагаю, что они двоичные байты) байт в массиве unsigned char data[4], вы должны быть в состоянии преобразовать так:

const unsigned int x = (data[0] << 24) | (data[1] << 16) | 
         (data[2] << 8) | data[3]; 

Если подключить ваши данные:

выше становится:

const unsigned int x = (0 << 24) | (0 << 16) | (5 << 8) | 160; 

, который является только 256 * 5 | 160 = 1280 | 160 = 1440, как и ожидалось.

+0

Ницца! Спасибо! –

 Смежные вопросы

  • Нет связанных вопросов^_^