....
finalize(char *hdrs, sendip_data *headers[], int index,
sendip_data *data, sendip_data *pack)< br /> {
........
For debugging purposes, I want a hexadecimal dump of the data and packet structure with the type sendip_data, which is a very complex structure. Actually they contain some binary information, so I am not sure if the output of my project is correct. Therefore, for debugging purposes, I want to write the data to a file so that I can use hexdump , As shown below-
$hexdump -C file.txt
In addition, because this is a runtime generation of n/w packets, I also Not sure about the length of the data and packet structure, I think fread/fwrite will be needed.. so please suggest me something.
#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: ", desc );
if (len == 0) {
printf(" ZERO LENGTH ");
return;
}
if (len <0) {
printf(" NEGATIVE LENGTH: %i ",len);
return;
}
// Process every byte in the data.
for (i = 0; i// Multiple of 16 means new line (with line offset).
if (( i% 16) == 0) {
// Just don't print ASCII for the zeroth line.
if (i != 0)
printf (" %s ", buff);
// Output the offset.
printf (" %04x ", i);
}
// Now the hex code for the specific character.
printf (" %02x", pc[i]);
// And store a printable ASCII character for later.
if ((pc[ i] <0x20) || (pc[i]> 0x7e))
buff[i% 16] ='.';
else
buff[i% 16] = pc[i ];
buff[(i% 16) + 1] =' ';
}
// Pad out last line if not exactly 16 characters.
while ((i% 16) != 0) {
printf (" ");
i++;
}
// And print the final ASCII bit.
printf (" %s ", buff);
}
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 a description, memory address and length to hexDump, It will output a hexadecimal dump (including character data) for inspection. When running 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.
....
finalize(char *hdrs, sendip_data *headers[], int index,
sendip_data *data, sendip_data *pack)
{
........
For debugging purposes, I want data and packet structure The hexadecimal dump of the type is sendip_data, which is a very complex structure. Actually they contain some binary information, so I am not sure if the output of my project is correct. Therefore, for debugging purposes, I think Write the data to a file so that I can use hexdump as shown below –
$hexdump -C file.txt
In addition, because this is a runtime generation of n/w packets, I am not sure about the length of the data and packet structure, I think fread /fwrite will need… so please suggest me something.
The following code will give you a hexadecimal dump of any memory in the code. < p>
#include
void hexDump (const char *desc, const void *addr, const int len) {< br /> int i;
unsigned char buff[17];
const unsigned char *pc = (const unsigned char*)addr;
// Output description if given.
if (desc != NULL)
printf ("%s: ", desc);
if (len == 0) {
printf( "ZERO LENGTH ");
return;
}
if (len <0) {
printf(" NEGATIVE LENGTH: %i ",len);< br /> return;
}
// Process every byte in the data.
for (i = 0; i// Multiple of 16 means new line (with line offset).
if ((i% 16) == 0) {
// Just don't print ASCII for the zeroth line.< br /> if (i != 0)
printf (" %s ", buff);
// Output the offset.
printf (" %04x ", i);
}
< br /> // Now the hex code for the specific character.
printf (" %02x", pc[i]);
// And store a printable ASCII character for later.
if ((pc[i] <0x20) || (pc[i]> 0x7e))
buff[i% 16] ='.';
else
buff [i% 16] = pc[i];
buff[(i% 16) + 1] =' ';
}
// Pad out last line if not exactly 16 characters.
while ((i% 16) != 0) {
printf (" ");
i++;
}
// And print the final ASCII bit.
printf (" %s ", buff);
}
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 a description, memory address and length to hexDump, and it will output a hexadecimal dump (including the word Character data) for inspection. When running 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.
< /p>