how to get hexdump of a structure data

前端 未结 2 2004
感动是毒
感动是毒 2020-11-29 00:22
 ....
 finalize(char *hdrs, sendip_data *headers[], int index,
                    sendip_data *data, sendip_data *pack)
 {

 ........

For debuggin

2条回答
  •  既然无缘
    2020-11-29 01:11

    The following code will give you a hex dump of arbitrary memory from within your code.

    #include 
    
    void hexDump (const char * desc, const void * addr, const int len) {
        int i;
        unsigned char buff[17];
        const unsigned char * pc = (const unsigned char *)addr;
    
        // Output description if given.
    
        if (desc != NULL)
            printf ("%s:\n", desc);
    
        // Length checks.
    
        if (len == 0) {
            printf("  ZERO LENGTH\n");
            return;
        }
        else if (len < 0) {
            printf("  NEGATIVE LENGTH: %d\n", len);
            return;
        }
    
        // Process every byte in the data.
    
        for (i = 0; i < len; i++) {
            // Multiple of 16 means new line (with line offset).
    
            if ((i % 16) == 0) {
                // Don't print ASCII buffer for the "zeroth" line.
    
                if (i != 0)
                    printf ("  %s\n", buff);
    
                // Output the offset.
    
                printf ("  %04x ", i);
            }
    
            // Now the hex code for the specific character.
            printf (" %02x", pc[i]);
    
            // And buffer a printable ASCII character for later.
    
            if ((pc[i] < 0x20) || (pc[i] > 0x7e)) // isprint() may be better.
                buff[i % 16] = '.';
            else
                buff[i % 16] = pc[i];
            buff[(i % 16) + 1] = '\0';
        }
    
        // Pad out last line if not exactly 16 characters.
    
        while ((i % 16) != 0) {
            printf ("   ");
            i++;
        }
    
        // And print the final ASCII buffer.
    
        printf ("  %s\n", buff);
    }
    
    // Very simple test harness.
    
    int main (int argc, char *argv[]) {
        char my_str[] = "a char string greater than 16 chars";
        hexDump ("my_str", &my_str, sizeof (my_str));
        return 0;
    }
    

    You pass into hexDump a description, memory address and length, and it will output a hex dump (including character data) for examination. When you run it with the included main, the output is:

    my_str:
      0000  61 20 63 68 61 72 20 73 74 72 69 6e 67 20 67 72  a char string gr
      0010  65 61 74 65 72 20 74 68 61 6e 20 31 36 20 63 68  eater than 16 ch
      0020  61 72 73 00                                      ars.
    

提交回复
热议问题