Reading text data is already pretty complex as it requires decoding the contents of a file, but reading binary data can be far more complex as it requires parsing the bytes and their contents to reconstruct the original data that was saved within the file.
In some cases, you might even have to cope with byte-ordering because, when saving a number into a text file, the order the bytes will be written in really depends on the system that is writing that file.
Suppose we want to read the beginning of the TCP header, the specific source and destination port, sequence number, and acknowledgment number, which is represented as follows:
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Source Port ...