2014-06-11 39 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表示 - 這就是爲什麼你看到它兩次。