memcpy似乎没有复制正确的数据

时间:2014-06-11 21:55:32

标签: arrays pointers struct memcpy

我正在尝试将一个ipv6地址字符串从一个变量复制到另一个变量但我得到了错误的值,我有这个:

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

typedef unsigned char bcm_ip6_t[16];

int main (void){

typedef struct {
        bcm_ip6_t IPv6addr;
        }mytype_t;

        bcm_ip6_t outarr;

/****************/

        mytype_t myvar[64];

        strcpy(outarr,"001122334455667788");

        printf("outarr %s\n",outarr);

        memcpy(myvar[0].IPv6addr, outarr, 16);

        printf("0x%x TEST0\n0x%x TEST1\n", myvar[0].IPv6addr[0], myvar[0].IPv6addr[1]);

return 0;
}

我希望看到以下输出:

outarr 001122334455667788
0x00 TEST0
0x11 TEST1

但我看到了这个:

outarr 001122334455667788
0x30 TEST0
0x30 TEST1

为什么会这样,我该如何解决?

谢谢, 罗恩

2 个答案:

答案 0 :(得分:1)

您正在打印字符的ASCII值,而不是地址字节的二进制值。

答案 1 :(得分:0)

您将字符串复制到无符号字符数组中。

然后打印出unsigned char数组的十六进制值。

字符'0'由十六进制值0x30表示 - 这就是您看到它两次的原因。