2017-08-22 3 views
0

J'essaie d'affecter les 8 premiers octets d'un tampon de caractères avec "00 00 00 00 00 00 00 A0". Je suis capable de vérifier que le tampon est bien construit. Chaque fois que j'essaie d'hexdump en utilisant mon utilitaire, j'obtiens une sortie inattendue. Pas sûr, s'il me manque quelque chose d'autre ici.Conversion hexadécimale et sortie de vidage

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

static void hexdump(const char *src, int count) 
{ 
    int i; 

    if (count == 0) 
     return; 

    for (i = 0; i < count; ++i) { 

     printf("%02x ", src[i]); 
     if ((i + 1) % 16 == 0) 
      printf("\n"); 
    } 
    printf("\n"); 
} 

int main() { 
    char msg_buff[148]; 
    memset(msg_buff, 0, 148); 
    int a[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0}; 
    sprintf(msg_buff, "%02x %02X %02X %02X %02X %02X %02X %02X", a[0], a[1], 
a[2], a[3], a[4], a[5], a[6], a[7], a[8]); 
    printf("packet %s \n", msg_buff); // 00 00 00 00 00 00 00 A0 
    hexdump(msg_buff, 148); 
} 

Ma sortie

packet 00 00 00 00 00 00 00 A0 
30 30 20 30 30 20 30 30 20 30 30 20 30 30 20 30 
30 20 30 30 20 41 30 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 

Sortie prévue

packet 00 00 00 00 00 00 00 A0 
00 00 00 00 00 00 00 A0 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 
+2

'char' ->' unsigned char' puis 'unsigned char msg_buff [148]; memset (msg_buff, 0, sizeof msg_buff); caractère non signé char a [8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0}; memcpy (msg_buff, a, sizeof a); hexdump (msg_buff, sizeof msg_buff); ',' "% 02x" '->' "% 02X" ' – BLUEPIXY

+0

Cela fonctionne ... merci – thinkcool

+0

@BLUEPIXY: vous aimez vraiment adapter toutes vos réponses dans la boîte de commentaires. :) – Groo

Répondre

1

Tout d'abord, vous devez supprimer a[8] de la fonction suivante dans votre code, car la longueur de a[] est 8, mais votre code a 9 membres:

sprintf(msg_buff, "%02X %02X %02X %02X %02X %02X %02X %02X", a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8]);

Deuxièmement, vous devez changer votre type de variables définies, votre code devrait ressembler à ce qui suit:

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

static void hexdump(const char *src, int count) 
{ 
    int i; 

    if (count == 0) 
     return; 

    for (i = 0; i < count; ++i) { 

     printf("%02x ", src[i]); 
     if ((i + 1) % 16 == 0) 
      printf("\n"); 
    } 
    printf("\n"); 
} 

int main() { 

    unsigned char msg_buff[148]; 
    memset(msg_buff, 0, 148); 
    unsigned char a[8] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0 }; 
    sprintf(msg_buff, "%02X %02X %02X %02X %02X %02X %02X %02X", a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7]); 
    printf("packet %s \n", msg_buff); // 00 00 00 00 00 00 00 A0 
    hexdump(msg_buff, 148); 

    return 0; 
} 
0

changement hexdump(msg_buff, 148);

à hexdump(a, 8);

Dans votre code, vous déversons la chaîne

+0

Je dois avoir des valeurs hexadécimales dans le tampon de message avec des valeurs valides. – thinkcool

+0

qu'est-ce que cela signifie ?, vous avez là exactement ce que vous mettez là –