2013-04-25 4 views
4

Я пытался объединить 4 шестнадцатеричных номера и не могу это сделать.Объединить шестнадцатеричные числа в C

Пример:

int a = 0x01; 
int b = 0x00; 
int c = 0x20; 
int d = 0xF1; 
//Result should be 0x010020F1 

Результаты, которые я получаю с помощью Sprintf и операции побитовое всегда отрезали нули, что дает мне ответы, как 1020F1, который сильно отличается от того, что я хочу. У кого-нибудь есть лучший метод?

+1

Если вы хотите использовать 'snprintf()', то: 'snprintf (буфер, SizeOf (буфер), "0x% .2X% .2X% .2X% .2X" , a, b, c, d); 'должен делать трюк, если« буфер »короче 11 байтов. –

+1

Если вы хотите только напечатать это, используйте 'printf (« 0x% 02x% 02x% 02x% 02x \ n », a, b, c, d);' –

+0

@Eddy_Em: будучи сверхпроницаемым, используйте 'X' для получить «F1» часть требуемого результата. –

ответ

12

Предположив unsigned int a,b,c,d;

unsigned int result = (a<<24) | (b<<16)| (c<<8) | d; 
+3

Этот ответ правильно использует 'unsigned int'. Мы должны подчеркнуть ** неподписанный **. Если идентификаторы являются 'int', как в вопросе,' a << 24' может быть неопределенным. –