转换包含十六进制数字的char *

时间:2015-01-26 23:23:38

标签: c

我使用920173e3作为命令行参数调用以下程序:

void getAddr(void* addr)
{
    unsigned const char* temp = (unsigned const char*)addr;
    printf("%s", &temp[0]);
}

int main(int argc, char *argv[]) 
{
    getAddr(argv[1]);
    return 0;
}

printf("%s", &temp[0])正确打印920173e3,但如何打印920173e4920173e5等等?

如果我尝试printf("%s", &temp[1])temp++之类的内容,那么printf("%s", &temp[0])会切断部分原始字符串(920173e3变为20173e3,然后0173e3 1}}等等)。

1 个答案:

答案 0 :(得分:2)

您的代码不起作用,因为它对字符串而不是数字进行操作。当您打印&temp[0]时,它与直接打印temp相同;当你"增加"它,你将指针递增到字符串的开头,所以它从前面删除一个字符。

要将其实际增加为数字,您需要将其转换为1,并将其显示为一个:

void getAddr(unsigned long addr)
{
  printf("%lx", addr);
}

int main(int argc, char *argv[]) {
  getAddr(strtoul(argv[1], NULL, 16));
  return 0;
}

现在你可以正确地增加它等等。