Define "read hex." Once again, hex is just a representation of a number. 0x00 is zero, 0x09 is nine, and instead of ten incrementing the first column, the 9 increments into an A. A->B, B->C, C->D, D->E, E->F. If you were to increase 0x0F, then you would finally increment the first column so that it would read 0x10. I'm guessing you knew that already, though.
There's a million different protocols that can be read using hex that are all quite different. For example, a network packet starts with a preamble, which is an 8 byte identification number that tells the computer a packet is being received. Then there's a 6 byte destination address, this would be a computer's own IP address assuming the packet has been received, then a 6 byte source address which is the IP address of the computer that sent it, a two byte number that tells how long the data transmission is going to be, then the actual data (minimum 46 bytes, maximum 1500), then finally a 4 byte CRC of the data, so that the computer can verify that it has read the data correctly. So a packet could look something like..
4500 0048 35E3 0000 4006 9034 CAE8 0F66
CAE8 0F62 F7F0 0016 8520 7612 1672 89E4
8018 4470 4060 0000 0101 080A 0003 BF65
0000 95FE 0000 000A 0EEF BE30 A72A 41FL
7BEL 2F9B 3CCD B5B0
Then there's machine code protocol, which is an operation code (OP code) followed by the arguments for that OP code. I gave the example before of push, which is 0x06 followed by a 4 byte (32 bit) address on x86 platforms or a 8 byte (64 bit) address on x86-64 platforms. There are a couple of OP codes that take no arguments, like 0x00 which simply causes the computer to pause and do nothing, called "nop" (pronounced 'nope', stands for 'no operation').
There's tons of other protocols, and honestly programmers make them up as they go. Even I have made at least 20 protocols for various things, I don't want to know how many protocols people like Linus Torvalds have created.