簡體   English   中英

轉換包含十六進制數字的char *

[英]Converting a char* containing hex digits

我將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 ,依此0173e3上)。

您的代碼不起作用,因為它對字符串而不是數字進行操作。 當您打印&temp[0]它與直接打印temp相同。 當您“遞增”它時,您就是將指針遞增到字符串的開頭,因此它將從前面刪除一個字符。

要將其實際增加為數字,您需要將其轉換為1,並顯示為1:

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

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

現在您可以適當地增加它,等等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM