Chapter 2.9
Binary Streams, Octet-Vectors, and Bit-Vectors
"I counted to ten slowly, using binary notation."
Everything that happens inside a computer, happens as binary-encoded instruction sequences---and everything that is stored in memory or on your filesystem, is also stored in binary. When people think of "machine language", they often think in terms of assembly language---but even that is a transliteration for the benefit of humans. The machine---your computer---only understands 1's and 0's.
You can do a lot with high-level programming constructs, but when performance is critical, or you need to get down to the nitty-gritty for fine-tuned control, binary is your friend. And naturally, Lisp makes it as simple as possible to work with binary data, whether working over a network, accessing the file system, or connecting to hardware with a driver.
In this chapter we will go into much more detail on the subject of binary streams, octet-vectors, and bit-vectors. We've seen them all before, but only in passing---now it's time to take on the subjects of signed and unsigned bytes, little-endian and big-endian bit ordering, manipulating bits, conversion between bit-vectors, octet-vectors, and their integer equivalents, and of course, bit-wise logic and binary arithmetic. We have also already covered the binary, octet, and hexadecimal notation system for integers, but a formal tour of those notations will also be helpful to this discussion, so we'll tackle that first.
Exercise 2.9.1
Base and Order
Exercise 2.9.2
Byte-Vectors
Exercise 2.9.3
Bit-Vectors
Exercise 2.9.4
Integers as Bytes
Exercise 2.9.5
Unsigned Bytes
Exercise 2.9.6
Signed Bytes
Exercise 2.9.7
Big-Endian Byte Ordering
Exercise 2.9.8
Little-Endian Byte Ordering
Exercise 2.9.9
Bit-Shifting
Exercise 2.9.10
Bit-wise Logic
Exercise 2.9.11
Byte-Vector Arithmetic
Exercise 2.9.12
Bit-Vector Arithmetic
Exercise 2.9.13
Binary Streams
Exercise 2.9.14
Binary Sockets and Networks
Extra Credit Exercise 2.9.15
Simulating Hardware in Lisp
Extra Credit Exercise 2.9.16
Binary Instruction Sets
Extra Credit Exercise 2.9.17
Assembly Instructions