如何使用memcpy在char数组中设置2个十六进制字节数据

时间:2015-10-15 18:43:41

标签: c arrays memcpy

我需要将字符数组x[11]中的十六进制值存储到内存空间:char* content。 字符数组的内容如下:

{'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 个答案:

答案 0 :(得分: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;
}