-1
如果我有下面的C數組:Ç十六進制字符數組字符串表示
char arr[4];
arr[0] = 0x11;
arr[1] = 0xc0;
arr[2] = 0x0c;
arr[3] = 0x00;
如何,如下所示的上述數據被轉換成一個字符串?
char* str = "11c00c00";
如果我有下面的C數組:Ç十六進制字符數組字符串表示
char arr[4];
arr[0] = 0x11;
arr[1] = 0xc0;
arr[2] = 0x0c;
arr[3] = 0x00;
如何,如下所示的上述數據被轉換成一個字符串?
char* str = "11c00c00";
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;
}
轉換每個字符爲無符號的字符(所以將0xC0不爲負),然後將其轉換成一個整數,並輸出作爲一個兩位數十六進制值。
#include <stdlib.h>
#include <stdio.h>
#define INT(x) ((int)(unsigned char)(x))
int main()
{
char arr[4];
arr[0] = 0x11;
arr[1] = 0xc0;
arr[2] = 0x0c;
arr[3] = 0x00;
char *str;
str=malloc(32);
sprintf(str, "%02x%02x%02x%02x",
INT(arr[0]), INT(arr[1]), INT(arr[2]), INT(arr[3]));
puts(str);
}
輸出是:
11c00c00
我試圖理解你的代碼。你能解釋爲什麼你做'c&0x0f'和'(c >> 4)&0x0f'?謝謝。 – Jake
'c&0x0F'是「計算c表示的字節值的低4位」。這會產生0-15之間的值。類似地,'(c >> 4)&0x0f'是「計算c的高4位」。 Google爲「c位掩碼教程」和「c bitshift教程」。很多很好的網站來解釋這個東西。 – selbie