我正在尝试使用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 :(得分:3)
确定有效字符及其解释的数字基数(基数) 如果为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