如何在C中从char *转换为int到hex十进制

时间:2017-08-22 15:16:43

标签: c

如何从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]);
}

1 个答案:

答案 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时会遇到问题。)