int main()
{
char arr[4];
arr[0] = 0x11;
arr[1] = 0xc0;
arr[2] = 0x0c;
arr[3] = 0x00;
size_t len = sizeof(arr)/sizeof(*arr);
char* str = (char*)malloc(len * 2 + 1);
for (size_t i = 0; i < len; i++)
{
const static char table[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c','d','e','f' };
unsigned char c = (unsigned char)(arr[i]);
unsigned int lowbyte = c & 0x0f;
unsigned int highbyte = (c >> 4) & 0x0f;
str[2 * i] = table[highbyte];
str[2 * i + 1] = table[lowbyte];
}
str[2 * len] = '\0';
printf("%s\n",str);
return 0;
}
Ich versuche, den Code zu verstehen. Können Sie bitte erklären, warum Sie 'c & 0x0f' und' (c >> 4) & 0x0f' getan haben? Vielen Dank. – Jake
'c & 0x0F' ist" berechne die unteren 4 Bits des Bytewerts, der durch c dargestellt wird ". Das ergibt einen Wert zwischen 0-15. Ähnlich ist "(c >> 4) & 0x0f" "berechne die oberen 4 Bits von c". Google für "c bitmask tutorial" und "c bitshift tutorial". Viele gute Seiten, um dieses Zeug zu erklären. – selbie