Search code examples
clinuxfwrite

Whats with the zeroes in my binary file?


So. I have been experimenting with fwrite().

On my system sizeof( int ) = 4. I have an array of ints that contains: 1, 2, 3, 4, 5 and 6.

When i write it to a binaryfile and view it with hexdump I get:

0000000 0001 0000 0002 0000 0003 0000 0004 0000
0000010 0005 0000 0006 0000                    
0000018

Whats does it write zeroes between the 4byte values?


Solution

  • I think you're misunderstanding how big a byte is in your output - 8 bits require two hexadecimal digits to be completely represented. One single int from your example is:

    0001 0000
    

    You might want to display as 32-bit data (or 8-bit data) rather than 16. That's what makes your dump look weird.

    I duplicated your binary file and ran od with a few different options. Hopefully you find the example enlightening:

    $ od -t x4 example
    0000000          00000001        00000002        00000003        00000004
    0000020          00000005        00000006                                
    0000030
    $ od -t x2 example 
    0000000      0001    0000    0002    0000    0003    0000    0004    0000
    0000020      0005    0000    0006    0000                                
    0000030
    $ od -t x1 example 
    0000000    01  00  00  00  02  00  00  00  03  00  00  00  04  00  00  00
    0000020    05  00  00  00  06  00  00  00                                
    0000030
    

    As you can see best from the 1- and 4-byte examples, I'm also on a little-endian machine, like you.