我正在尝试将一个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
为什么会这样,我该如何解决?
谢谢, 罗恩
答案 0 :(得分:1)
您正在打印字符的ASCII值,而不是地址字节的二进制值。
答案 1 :(得分:0)
您将字符串复制到无符号字符数组中。
然后打印出unsigned char数组的十六进制值。
字符'0'由十六进制值0x30表示 - 这就是您看到它两次的原因。