У вас две проблемы.
Во-первых, массив символов a
содержит числа, такие как 2
, вместо кодов ASCII, представляющих эти числа, таких как '2'
(= 50 в ASCII, может отличаться в других системах).Попробуйте изменить свой код на
a[i] = (nb>>(i*8)) & 0xFF + '0';
Вторая проблема заключается в том, что результатом вышеприведенных вычислений может быть любое значение от 0 до 255, или, другими словами, число, для печати которого требуется более одной цифры.
Если вы хотите напечатать шестнадцатеричные числа (0-9, AF), достаточно двух цифр для такого вычисления, и вы можете написать что-то вроде
a[2*i + 0] = int2hex( (nb>>(i*8)) & 0x0F ); //right hexa digit
a[2*i + 1] = int2hex( (nb>>(i*8+4)) & 0x0F ); //left hexa digit
, где
char int2hex(int n) {
if (n <= 9 && n >= 0)
return n + '0';
else
return (n-10) + 'A';
}