将十六进制转换为十进制

时间:2014-08-07 10:15:18

标签: c

我正在尝试使用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;
}

此代码有什么问题?

3 个答案:

答案 0 :(得分:3)

  

来自strtol - C++ Reference

     

确定有效字符及其解释的数字基数(基数)   如果为0,则使用的基数由序列中的格式决定(参见上文)。

所以你应该使用:

long hex_int = strtol(hexadecimal, NULL, 16);

答案 1 :(得分:0)

如果你想要十六进制,请说出来:

long hex_int = strtol(hexadecimal, NULL, 10);

最后一个参数应为16

答案 2 :(得分:0)

strtol的语法是 -

long int strtol(const char *nptr, char **endptr, int base);

如果base为零或16,则字符串可以包含" 0x"前缀,数字将在16位读取;否则,零基数被视为10(十进制),除非下一个字符是' 0',在这种情况下,它被视为8(八进制)。

而不是这个 -

long hex_int = strtol(hexadecimal, NULL, 10);

你应该使用 -

long hex_int = strtol(hexadecimal, NULL, 16);

了解更多信息strtol