2014-06-11 41 views
0

我想蒂奥IPv6地址的字符串从一个变量复制到另外一个,但我得到了错误的价值,我有这样的:的memcpy似乎并没有复制正确数据

#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 

这是为什么,我该如何解决呢?

谢谢你,罗恩

回答

1

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

+0

true .... hoop .... brain fart ... – cerr

0

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

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

字符'0'用十六进制值0x30表示 - 这就是为什么你看到它两次。