[英]Convert a Hexadecimal to a Decimal
我正在嘗試使用strtol
將十六進制值轉換為十進制。 以前在程序中已將其驗證為有效的十六進制值,現在我正嘗試對其進行轉換,但是對於大多數值,它始終顯示“ 0”。
int convert_hexadecimal_address(char *hexadecimal) {
printf("The character going in is %s\n", hexadecimal);
long hex_int = strtol(hexadecimal, NULL, 10);
printf("The long is %ld\n", hex_int);
return hex_int;
}
此代碼有什么問題?
確定有效字符及其解釋的數字基(基數)。
如果為0,則使用的基數由序列中的格式確定(請參見上文)。
因此,您應該使用:
long hex_int = strtol(hexadecimal, NULL, 16);
如果要十六進制,請說:
long hex_int = strtol(hexadecimal, NULL, 10);
最后一個參數應為16
。
strtol
語法是-
long int strtol(const char *nptr, char **endptr, int base);
如果base
為零或16,則字符串可以包含一個“ 0x”前綴,並且該數字將以16為基數讀取;否則,字符串將以16為基數。 否則,除非下一個字符為“ 0”,否則零基將被視為10(十進制),在這種情況下,它將被視為8(八進制)。
代替這個-
long hex_int = strtol(hexadecimal, NULL, 10);
您應該使用-
long hex_int = strtol(hexadecimal, NULL, 16);
欲了解更多信息與strtol
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.