我有一個4字節的十六進制字符串,我想將它們轉換成c中的2字節整數。十六進制字符串轉換爲整數在C
我不能使用strtol,fprintf或fscanf。
我想這一點: -
unsigned char *hexstring = "12FF";
轉換爲這樣的: -
unsigned int hexInt = 0x12FF
我有一個4字節的十六進制字符串,我想將它們轉換成c中的2字節整數。十六進制字符串轉換爲整數在C
我不能使用strtol,fprintf或fscanf。
我想這一點: -
unsigned char *hexstring = "12FF";
轉換爲這樣的: -
unsigned int hexInt = 0x12FF
編輯:Doh,只是讀azmuhak建議的鏈接。這絕對是這個問題的重複。在azmuhak的鏈接答案也更加完整,因爲它以「0x」前綴交易...
下面將與使用標準庫鍛鍊 ... 看到它在ideone here
#include <stdio.h>
#define ASCII_0_VALU 48
#define ASCII_9_VALU 57
#define ASCII_A_VALU 65
#define ASCII_F_VALU 70
unsigned int HexStringToUInt(char const* hexstring)
{
unsigned int result = 0;
char const *c = hexstring;
char thisC;
while((thisC = *c) != NULL)
{
unsigned int add;
thisC = toupper(thisC);
result <<= 4;
if(thisC >= ASCII_0_VALU && thisC <= ASCII_9_VALU)
add = thisC - ASCII_0_VALU;
else if(thisC >= ASCII_A_VALU && thisC <= ASCII_F_VALU)
add = thisC - ASCII_A_VALU + 10;
else
{
printf("Unrecognised hex character \"%c\"\n", thisC);
exit(-1);
}
result += add;
++c;
}
return result;
}
int main(void)
{
printf("\nANSWER(\"12FF\"): %d\n", HexStringToUInt("12FF"));
printf("\nANSWER(\"abcd\"): %d\n", HexStringToUInt("abcd"));
return 0;
}
該代碼可以更有效率,我使用toupper
庫函數,但你可以很容易地實現自己的...
此外,這不會解析字符串以「0x」開頭......但你可以添加在開始時對其進行快速檢查並且只是嚼碎那些字符...
謝謝,正是我在找的東西。無需使用toupper,因爲我的應用程序以大寫形式發送所有字符。 – Remixed123
您將使用ASCII字符而不是'#define ASCII_0_VALU'0''而不是'#define ASCII_0_VALU 48'這個整數。它可能更具可讀性。 – Jack
你可以stdlib.h中
http://www.tutorialspoint.com/c_standard_library/c_function_strtol.htm
char str[30] = "0x12FF";
char **ptr;
long val;
val = strtol(str, ptr, 16);
使用與strtol()
提示:12FF是4863,將hex轉換爲整數 – P0W
所以你想重寫C代碼?或者你有一個充滿4字節字符的文件需要進行hexified?無論哪種方式...聞起來像功課。 –
強制性的「你有什麼試過」的評論。 –