2013-07-30 223 views
1

我正在努力獲得一個字符串,在處理過程中被理解爲一個十六進制字符串。我正在寫一個小程序,我在這裏輸入ascii文本作爲十六進制字符串。將十六進制字符串數組轉換爲十六進制數組

即我讀:

char *str = "313233"; 

這實際上是0X31,0x32和0x33這實際上是字符串 「123」。

我需要一個無符號的字符陣列如下:

unsigned char val[] = {0x31, 0x32, 0x33}; 

當我試圖sscanf的或sprintf的,他們期望整數數組是目標指針:(

也就是說,是這樣的:

sprintf(str, "%2x", &val[0]); 

如何做到這一點?也許這是很瑣碎,但不知何故,我很困惑。

謝謝。

+1

'0x31'不是十六進制'31' –

+2

有計算器上類似的問題至極我的幫助:http://stackoverflow.com/questions/3408706/hex-string-to-byte-array-in-c – nabuchodonossor

+0

@DavidRF true,但在我的情況下,我得到一個字符串的十六進制輸入,因此我知道該字符串是一個十六進制字符串:) – user900785

回答

1

sscanf將這樣的伎倆:

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

int main(void) 
{ 
    char *str = "313233"; 
    size_t i, n = strlen(str)/2; 
    unsigned char *v; 

    v = malloc(n); 
    if (v == NULL) { 
     perror("malloc"); 
     exit(EXIT_FAILURE); 
    } 
    for (i = 0; i < n; i++) 
     sscanf(str + (i * 2), "%2hhx", &v[i]); 
    for (i = 0; i < n; i++) 
     printf("0x%2x\n", v[i]); 
    free(v); 
    return 0; 
} 
相關問題