如何从char *转换为int到十六进制十进制?我的输入为78
,我希望4e
,但结果为3465
。
int main()
{
char *input = "78";
int num = strtol(input, NULL, 10); // to int
char out[2];
sprintf(out, "%x", num); // to hex
for(int i=0;i<2;i++)
printf("%x\n", out[i]);
}
答案 0 :(得分:3)
这是错误的:
char out[2];
sprintf(out, "%x", num); // to hex
因为你写的超出了数组的范围。您的号码有两个十六进制位置,并且字符串的\0
终结符需要附加字节。它必须至少为char out[3]
。
这甚至是wronger:
for(int i=0;i<2;i++)
printf("%x\n", out[i]);
您已经具有该数字的十六进制字符串表示形式,现在将单个字符解释为十六进制数字。只需输出您的out
字符串,例如puts(out)
或printf("%s\n", out)
(要求\0
终结符出现。)
你可以将整个事情浓缩为
int main(void)
{
char *input = "78";
long num = strtol(input, NULL, 10); // to int
printf("%lx\n", num); // to hex
}
(请注意,strtol()
会返回long
- 如果数字越大,您在将其转换为int
时会遇到问题。)