簡體   English   中英

將十六進制轉換為十進制

[英]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;
}

此代碼有什么問題?

strtol-C ++參考

確定有效字符及其解釋的數字基(基數)。
如果為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM