2016-02-01 4 views
-2

J'ai le problème suivant lors de l'utilisation memcpy:Copie des données binaires avec memcpy dans c

Supposons que des données de hexadécimaux doivent être copiés en binaire, par exemple: 203800000E820006, puis appliquez l'instruction suivante:

unsigned char buffer[8]; 
memcpy(buffer,"\x20\x38\x00\x00\x0E\x82\x00\x06",8); 

Cependant, lorsque j'écris les données en binaire, il imprime seulement les 2 premiers octets en binaire, car \ x00 est interprété comme un terminateur de chaîne. Comment éviter ou corriger ceci afin de représenter la chaîne de 16 caractères dans un format binaire de 8 caractères?

+0

Que voulez-vous dire par « il ne semble » ?! Apparaît où? Aussi, pourquoi le "+1"? C'est 8 octets de données, non? –

+2

Votre code est correct, et votre tableau 'buffer' devrait contenir exactement les 8 octets que vous désirez. Pourquoi dites-vous "il n'apparaît que les 2 premiers octets"? Fais-tu 'printf ("% s ", buffer)' ou quelque chose? Cela a du sens, car '% s' attend une chaîne terminée par un caractère nul, donc elle s'est arrêtée quand elle en a vu une. Mais le reste des données était là (il n'a tout simplement pas été imprimé). –

+2

@TinoReyna Ce n'est pas une chaîne. S'il vous plaît ne l'appelez pas une chaîne. Si vous l'imprimez, vous devez utiliser du code qui sait comment imprimer 8 octets de données binaires. Utilisez-vous un tel code? –

Répondre

3

Le tampon que vous avez n'est pas une chaîne. Vous ne pouvez pas le traiter comme tel en le passant à des fonctions qui attendent une chaîne telle que strcat, strcpy, strcmp ou le spécificateur de format %s de printf.

Vous avez un tableau de caractères, afin de les imprimer en tant que tel:

int i; 
for (i=0;i<sizeof(buffer);i++) { 
    printf("%02hhX ", buffer[i]); 
} 
printf("\n");