Hexdump a file
A simple version of hexdump to print the contents of a file.
Usage:
xdump <filename>
An example: A dump of the source file xdump.c
00000000 2369 6E63 6C75 6465 203C 7374 6469 6F2E |#include <stdio.|
00000010 683E 0A23 696E 636C 7564 6520 3C73 7464 |h>.#include <std|
00000020 6C69 622E 683E 0A23 696E 636C 7564 6520 |lib.h>.#include |
00000030 3C73 7472 696E 672E 683E 0A23 696E 636C |<string.h>.#incl|
00000040 7564 6520 3C73 7464 696E 742E 683E 0A23 |ude <stdint.h>.#|
00000050 696E 636C 7564 6520 3C65 7272 6E6F 2E68 |include <errno.h|
00000060 3E0A 2369 6E63 6C75 6465 203C 6374 7970 |>.#include <ctyp|
00000070 652E 683E 0A0A 2364 6566 696E 6520 4255 |e.h>..#define BU|
00000080 4646 4552 5F53 495A 4520 2020 2020 2020 |FFER_SIZE |
00000090 2020 2020 2020 2020 2020 3235 360A 0A73 | 256..s|
000000A0 7461 7469 6320 7569 6E74 385F 7420 5F62 |tatic uint8_t _b|
000000B0 7566 5B42 5546 4645 525F 5349 5A45 5D3B |uf[BUFFER_SIZE];|
000000C0 0A0A 0A76 6F69 6420 6865 7844 756D 7028 |...void hexDump(|
000000D0 766F 6964 202A 2062 7566 6665 722C 2075 |void * buffer, u|
000000E0 696E 7433 325F 7420 6275 6666 6572 4C65 |int32_t bufferLe|
000000F0 6E29 0A7B 0A20 2020 2069 6E74 2020 2020 |n).{. int |
00000100 2020 2020 2020 2020 2020 2020 2020 2020 | |
00000110 2069 3B0A 2020 2020 696E 7420 2020 2020 | i;. int |
00000120 2020 2020 2020 2020 2020 2020 2020 2020 | |
00000130 6A20 3D20 303B 0A20 2020 2075 696E 7438 |j = 0;. uint8|
00000140 5F74 202A 2020 2020 2020 2020 2020 2020 |_t * |
00000150 2020 2062 7566 3B0A 2020 2020 7374 6174 | buf;. stat|
00000160 6963 2063 6861 7220 2020 2020 2020 2020 |ic char |
00000170 2020 2020 737A 4153 4349 4942 7566 5B31 | szASCIIBuf[1|
00000180 375D 3B0A 2020 2020 7374 6174 6963 2075 |7];. static u|
00000190 696E 7433 325F 7420 2020 2020 2020 2020 |int32_t |
000001A0 6F66 6673 6574 203D 2030 3B0A 0A20 2020 |offset = 0;.. |
000001B0 2062 7566 203D 2028 7569 6E74 385F 7420 | buf = (uint8_t |
000001C0 2A29 6275 6666 6572 3B0A 0A20 2020 2066 |*)buffer;.. f|
000001D0 6F72 2028 6920 3D20 303B 6920 3C20 6275 |or (i = 0;i < bu|
000001E0 6666 6572 4C65 6E3B 692B 2B29 207B 0A20 |fferLen;i++) {. |
000001F0 2020 2020 2020 2069 6620 2828 6920 2520 | if ((i % |
00000200 3136 2920 3D3D 2030 2920 7B0A 2020 2020 |16) == 0) {. |
00000210 2020 2020 2020 2020 6966 2028 6920 213D | if (i !=|
00000220 2030 2920 7B0A 2020 2020 2020 2020 2020 | 0) {. |
00000230 2020 2020 2020 737A 4153 4349 4942 7566 | szASCIIBuf|
00000240 5B6A 5D20 3D20 303B 0A20 2020 2020 2020 |[j] = 0;. |
00000250 2020 2020 2020 2020 206A 203D 2030 3B0A | j = 0;.|
00000260 0A20 2020 2020 2020 2020 2020 2020 2020 |. |
00000270 2070 7269 6E74 6628 2220 207C 2573 7C5C | printf(" |%s|\|
00000280 6E22 2C20 737A 4153 4349 4942 7566 293B |n", szASCIIBuf);|
00000290 0A20 2020 2020 2020 2020 2020 207D 0A20 |. }. |
000002A0 2020 2020 2020 2020 2020 2020 2020 200A | .|
000002B0 2020 2020 2020 2020 2020 2020 7072 696E | prin|
000002C0 7466 2822 2530 3858 5C74 222C 206F 6666 |tf("%08X\t", off|
000002D0 7365 7429 3B0A 2020 2020 2020 2020 2020 |set);. |
000002E0 2020 6F66 6673 6574 202B 3D20 3136 3B0A | offset += 16;.|
000002F0 2020 2020 2020 2020 7D0A 0A20 2020 2020 | }.. |
00000300 2020 2069 6620 2828 6920 2520 3229 203D | if ((i % 2) =|
00000310 3D20 3020 2626 2028 6920 2520 3136 2920 |= 0 && (i % 16) |
00000320 3E20 3029 207B 0A20 2020 2020 2020 2020 |> 0) {. |
00000330 2020 2070 7269 6E74 6628 2220 2229 3B0A | printf(" ");.|
00000340 2020 2020 2020 2020 7D0A 0A20 2020 2020 | }.. |
00000350 2020 2070 7269 6E74 6628 2225 3032 5822 | printf("%02X"|
00000360 2C20 6275 665B 695D 293B 0A20 2020 2020 |, buf[i]);. |
00000370 2020 2073 7A41 5343 4949 4275 665B 6A2B | szASCIIBuf[j+|
00000380 2B5D 203D 2069 7370 7269 6E74 2862 7566 |+] = isprint(buf|
00000390 5B69 5D29 203F 2062 7566 5B69 5D20 3A20 |[i]) ? buf[i] : |
000003A0 272E 273B 0A20 2020 207D 0A0A 2020 2020 |'.';. }.. |
000003B0 2F2A 0A20 2020 202A 2A20 5072 696E 7420 |/*. ** Print |
000003C0 6669 6E61 6C20 4153 4349 4920 626C 6F63 |final ASCII bloc|
000003D0 6B2E 2E2E 0A20 2020 202A 2F0A 2020 2020 |k.... */. |
000003E0 737A 4153 4349 4942 7566 5B6A 5D20 3D20 |szASCIIBuf[j] = |
000003F0 303B 0A20 2020 2070 7269 6E74 6628 2220 |0;. printf(" |
00000400 207C 2573 7C5C 6E22 2C20 737A 4153 4349 | |%s|\n", szASCI|
00000410 4942 7566 293B 0A7D 0A0A 696E 7420 6D61 |IBuf);.}..int ma|
00000420 696E 2869 6E74 2061 7267 632C 2063 6861 |in(int argc, cha|
00000430 7220 2A2A 2061 7267 7629 0A7B 0A20 2020 |r ** argv).{. |
00000440 2046 494C 4520 2A20 2020 2020 2020 2020 | FILE * |
00000450 2066 7074 723B 0A20 2020 2063 6861 7220 | fptr;. char |
00000460 2A20 2020 2020 2020 2020 2070 737A 4669 |* pszFi|
00000470 6C65 6E61 6D65 3B0A 2020 2020 7569 6E74 |lename;. uint|
00000480 385F 7420 2A20 2020 2020 2020 6275 6666 |8_t * buff|
00000490 6572 3B0A 2020 2020 7569 6E74 3332 5F74 |er;. uint32_t|
000004A0 2020 2020 2020 2020 6279 7465 7352 6561 | bytesRea|
000004B0 643B 0A0A 2020 2020 6966 2028 6172 6763 |d;.. if (argc|
000004C0 203E 2031 2920 7B0A 2020 2020 2020 2020 | > 1) {. |
000004D0 7073 7A46 696C 656E 616D 6520 3D20 7374 |pszFilename = st|
000004E0 7264 7570 2826 6172 6776 5B31 5D5B 305D |rdup(&argv[1][0]|
000004F0 293B 0A20 2020 207D 0A20 2020 2065 6C73 |);. }. els|
00000500 6520 7B0A 2020 2020 2020 2020 7072 696E |e {. prin|
00000510 7466 2822 5573 6167 653A 2078 6475 6D70 |tf("Usage: xdump|
00000520 203C 6669 6C65 6E61 6D65 3E5C 6E5C 6E22 | <filename>\n\n"|
00000530 293B 0A20 2020 2020 2020 2072 6574 7572 |);. retur|
00000540 6E20 303B 0A20 2020 207D 0A0A 2020 2020 |n 0;. }.. |
00000550 6275 6666 6572 203D 205F 6275 663B 0A0A |buffer = _buf;..|
00000560 2020 2020 6670 7472 203D 2066 6F70 656E | fptr = fopen|
00000570 2870 737A 4669 6C65 6E61 6D65 2C20 2272 |(pszFilename, "r|
00000580 6222 293B 0A0A 2020 2020 6966 2028 6670 |b");.. if (fp|
00000590 7472 203D 3D20 4E55 4C4C 2920 7B0A 2020 |tr == NULL) {. |
000005A0 2020 2020 2020 6670 7269 6E74 6628 7374 | fprintf(st|
000005B0 6465 7272 2C20 2246 6169 6C65 6420 746F |derr, "Failed to|
000005C0 206F 7065 6E20 6669 6C65 2025 733A 2573 | open file %s:%s|
000005D0 5C6E 222C 2070 737A 4669 6C65 6E61 6D65 |\n", pszFilename|
000005E0 2C20 7374 7265 7272 6F72 2865 7272 6E6F |, strerror(errno|
000005F0 2929 3B0A 2020 2020 2020 2020 6578 6974 |));. exit|
00000600 282D 3129 3B0A 2020 2020 7D0A 0A20 2020 |(-1);. }.. |
00000610 2077 6869 6C65 2028 2166 656F 6628 6670 | while (!feof(fp|
00000620 7472 2929 207B 0A20 2020 2020 2020 2062 |tr)) {. b|
00000630 7974 6573 5265 6164 203D 2066 7265 6164 |ytesRead = fread|
00000640 2862 7566 6665 722C 2031 2C20 4255 4646 |(buffer, 1, BUFF|
00000650 4552 5F53 495A 452C 2066 7074 7229 3B0A |ER_SIZE, fptr);.|
00000660 0A20 2020 2020 2020 2069 6620 2862 7974 |. if (byt|
00000670 6573 5265 6164 203E 2030 2920 7B0A 2020 |esRead > 0) {. |
00000680 2020 2020 2020 2020 2020 6865 7844 756D | hexDum|
00000690 7028 6275 6666 6572 2C20 6279 7465 7352 |p(buffer, bytesR|
000006A0 6561 6429 3B0A 2020 2020 2020 2020 7D0A |ead);. }.|
000006B0 2020 2020 7D0A 0A20 2020 2066 636C 6F73 | }.. fclos|
000006C0 6528 6670 7472 293B 0A0A 2020 2020 7265 |e(fptr);.. re|
000006D0 7475 726E 2030 3B0A 7D0A |turn 0;.}.|