2013-08-29 30 views
1

十六進制我有我在哪裏輸入一個小數參數我的代碼的問題:[解決]的char *小數在小尾數

./a.out 650 

,並想簡單的十進制值轉換爲十六進制和輸出它在一個小端格式:

0A28 

我目前的解決辦法是轉換的char *使用的atoi(我們可以假設輸入是小數,沒有關於錯誤情況的擔心)爲十進制。

我已閱讀,我可以創造一個int *和它轉換爲char *,這樣的事情:

char* bar = argv[1]; 
int* foo = (char*)&bar; 

,並通過它遍歷會產生我所需要的解決方案,但我不太瞭解如何工作。

任何提示將不勝感激,我會繼續採取它。

感謝

回答

2

像這樣:

#include <stdio.h> 
#include <stdlib.h> 

unsigned long int n = strtoul(argv[1], NULL, 0); 
unsigned char const * p = (unsigned char const *)&n; 

for (size_t i = 0; i != sizeof n; ++i) 
    printf("%02X", p[i]); 

要打印的反向字節序,代替i使用sizeof n - i - 1

+0

謝謝,我從來沒有聽說過strtoul。我會研究這一點,看看我能不能知道爲什麼,而不是如何。 – Joshua

2

這應該把程序的第一個參數作爲大端的十六進制數和小端的十六進制數打印出來。

int main(int argc, char *argv[]) { 
    if (argc != 2) return -1; 
    char *endptr; 
    unsigned long d = strtoul(argv[1], &endptr, 10); 
    if (*endptr) { 
    printf("Not a decimal number '%s'\n", argv[1]); 
    return 1; 
    } 
    printf("%lX\n", d); // normal 
    do { 
    printf("%02hhX", (unsigned char) d); // little endian first 
    d >>= 8; 
    } while (d); 
    printf("\n"); 
    return 0; 
}