2015-10-15 46 views
0

我需要将字符数组x[11]中的十六进制值存储到内存空间:char* content。 字符数组的内容,如:如何使用memcpy在char数组中设置2个十六进制字节数据

{'b', '5', 'a', '8', 'a', 'e', 'a', 'b', 'c', '7', '\n'} 

我需要保存除了\n的十大要素。下面是我如何做到了:

char *content = (char *)calloc(msg_len, sizeof(char)); 
memcpy(content , x, 10); 

存储空间的输出最终是ASCII格式:

62(b) 35(5) 61(a) 38(8) 61(a) ... 

但我希望它在内存中展示的是:

b5 a8 ae ab c7 

就像上面显示的字符数组一样。

我可以采取哪些措施来解决这个问题?

+1

您需要''%x“'格式说明符。顺便说一句,双引号表示'char [x]',单引号表示'char's。 – Downvoter

+1

您希望memcpy()会将ASCII十六进制字符串更改为二进制字节吗? Nope :( –

+0

字符和整数在字节级别上并没有什么不同,这取决于它们是如何解释的。一个很好的例子是缓冲区溢出攻击,其中用户输入被解释为可运行代码,例如 – Downvoter

回答

0

会这样的工作?

#include <stdio.h> 

int main() { 
    char x[] = {'b', '5', 'a', '8', 'a', 'e', 'a', 'b', 'c', '7', '\n'}; 
    unsigned long long a; 
    unsigned char b[5]; 
    sscanf(x, "%llx\n", &a); 

    b[0] = a >> 32; 
    b[1] = (a >> 24); 
    b[2] = (a >> 16); 
    b[3] = (a >> 8); 
    b[4] = a ; 

    for(int i = 0; i < 5; i++) { 
     printf("%x ", b[i]); 
    } 
    printf("\n"); 
    return 0; 
} 
+0

是的!这给了我我需要的东西。谢谢jayant – tester

相关问题