2013-07-30 221 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; 
} 
相关问题