[英]Converting hex string stored as chars to decimal in C
我得到了一個字符串hex_txt,其中包含代碼中概述的4位十六進制數字,並分成兩個數組項。 我需要將其轉換為十進制。 以下是我的操作方式。
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);
有沒有更快或更有效的方法? 這是我目前的臨時解決方案,但我想知道是否有適當的方法來做到這一點。
int result = (unsigned char)hex_txt[0] * 256 + (unsigned char)hex_txt[1];
字符串hex_txt
包含兩個字節。 我猜想順序是大端的(如果是小端的,則顛倒下標)。 hex_txt[0]
的字符代碼為0xAB, hex_txt[1]
的字符代碼為0xCD。 使用無符號字符轉換可確保您不會被帶符號的字符弄亂。
或者,一次完成所有操作:
printf("%d\n", (unsigned char)hex_txt[0] * 256 + (unsigned char)hex_txt[1]);
只需使用stdlib.h
strtoul()
函數。
請參見以下示例:
const char sHex[] = "AE";
unsigned char ucByte = 0;
ucByte = (unsigned char) strtoul(sHex, NULL, 16); //BASE 16 FOR HEX VALUES
這是我的工作:
n = 0;
while (*p){
if (ISDIGIT(*p)) n = n*16 + (*p++ - '0');
else if (ISALPHA(*p)) n = n*16 + (LOWERCASE(*p++) - 'a' + 10);
else break;
}
而且(您會討厭這一點,但是它適用於ASCII)我作弊:
#define LOWERCASE(c) ((c) | ' ')
添加:對不起,我只是重新閱讀了您的問題。 為什么不這樣做:
(unsigned int)(unsigned char)p[0] * 256 + (unsigned int)(unsigned char)p[1]
我可能會胡言亂語,但如果您使用:
char hex_txt[] = "\xAB\xCD";
那么實際上您只需定義2個字節:
char hex_txt[] = {0xab, 0xcd};
因此要將其轉換為int可以執行以下操作:
int number = (int) ((short *) *hex_text);
盡管我在這里發布了一段C ++代碼,但您可能不需要它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.