2015-04-01 55 views
-3

我需要從命令行掃描32位十六進制數字並將其填充到uint8_t [16]數組中,我嘗試掃描字符串並將其轉換爲十六進制,但其確實很麻煩因爲我找不到這樣做的功能,最好的辦法是什麼?掃描一個128位輸入用32個十六進制值表示

+0

請告訴我們你已經嘗試過什麼,它是怎麼失敗的。 – 2015-04-01 08:08:36

+0

請從命令行顯示一個例如recveived的字符串示例。 – DrKoch 2015-04-01 08:12:42

+0

daec3055df058e1c39e814ea76f6747e – user4228739 2015-04-01 08:13:45

回答

1
uint8_t get_int(char c) 
{ 
    if (c >= '0' && c <= '9') return  c - '0'; 
    if (c >= 'A' && c <= 'F') return 10 + c - 'A'; 
    if (c >= 'a' && c <= 'f') return 10 + c - 'a'; 
    return -1; 
} 

int main(void) 
{ 
    char buff[33]; 
    size_t size; 
    size_t i; 
    uint8_t *output; 

    fgets(buff, sizeof buff, stdin); 
    size = strlen(buff)/2; 
    output = malloc(size); 

    for (i= 0; i < size; ++i) 
     output[i] = get_int(buff[2*i]) * 16 + get_int(buff[2*i+1]); 

    for (i= 0; i < size; ++i) 
     printf("%u ", output[i]); 

    return 0; 
} 

ideone link

相關問題