我給出了一個字符串hex_txt,其中包含一個4位十六進制數字,代碼中概括了兩種數組條目。我需要將它轉換爲十進制。以下是我做這件事的方式。將存儲爲字符的十六進制字符串轉換爲十進制C
unsigned char hex_txt[] = "\xAB\xCD";
unsigned char hex_num[5];
unsigned int dec_num;
sprintf(hex_num, "%.2x%.2x", (int)hex_txt[0], (int)hex_txt[1]);
printf("%s\n", hex_num);
sscanf(hex_num, "%x", &dec_num);
printf("%d\n", dec_num);
有沒有更快或更有效的方法呢?這是我目前的臨時解決方案,但我想知道是否有適當的方法來做到這一點。
正是我在找什麼,謝謝。 – v64 2009-09-08 14:28:56
你怎麼能確定(無符號字符)hex_txt [0] * 256不是零? – 2009-09-08 15:00:00
@Mike:hex_txt [0]是0xAB或171; 171 * 256 = 43776.如果'int'是一個16位的數量,那麼這將是一個負的非零結果(或者可能是一個溢出信號,但我還沒有聽說過產生溢出信號的機器用於簽名算術溢出);如果它是一個無符號的16位數量,它仍然是一個非零結果。我無法看到乘法產生零。此外,我的答案並不取決於產生非零結果的乘法 - 讓我對你的問題來自何處感到困惑。 – 2009-09-08 16:04:59