17 May 78
INTERNET Notebook
IEN: 39 J. Postel Section: 2.5.3.4.2 ISI
17 May 1978
NSW Data Representation (NSWB8)
Data transmitted between NSW processes is encoded into a standard form. This standard form, called NSWB8, is based on a few atomic data types and a list data type.
Data Structure Types and Encoding
EMPTY
TYPE (1 byte) = 1
VALUE (none) empty
BOOLEAN
TYPE (1 byte) = 2
VALUE (1 byte) boolean
FALSE=0
TRUE=1
INDEX
TYPE (1 byte) = 3
VALUE (2 bytes) index
The value represents a positive integer in the range 0 through 2**16 - 1.
The most significant byte is first.
INTEGER
TYPE (1 byte) = 4
VALUE (4 bytes) two's complement integer
The most significant byte is first. [If we don't use (2**32-1) it will be easier on one's complement machines.]
Postel [page 1]
17 May 78
INTERNET Notebook NSW Data Representation (NSWB8)
BITSTR
TYPE (1 byte) = 5
COUNT (2 bytes)
VALUE (count bits) left adjusted in (count+7)/8 bytes
CHARSTR
TYPE (1 byte) = 6
COUNT (2 bytes)
VALUE (count bytes) ASCII text
LIST
TYPE (1 byte) = 7
COUNT (2 bytes)
Count Data Structures
PAD
TYPE (1 byte) = 9
VALUE (none)
Any PAD elements should be completely ignored. They are not to be counted (for example as elements of a LIST). The concept of a PAD element has been useful in forming data structures, especially when the structure cannot be built sequentially.
The first byte of a data structure is a type code. The following bytes depend on the type code. The type code zero is reserved. The type code 8 is reserved for possible use as REPEAT (data compression) element.
Postel [page 2]
17 May 78
INTERNET Notebook NSW Data Representation (NSWB8)
Data Structure Format
element
- —–*
empty * 1 *
- —–*
1
- —–*——–*
boolean * 2 * 0 or 1 * 0 for FALSE or 1 for TRUE
- —–*——–*
1 1
- —–*——-*
index * 3 * index * small nonnegative integer
- —–*——-*
1 2
- —–*——–*
integer * 4 *integer * two's complement integer
- —–*——–*
1 4
- —–*——-*——*
bitstr * 5 * count * bits *
- —–*——-*——*
1 2 count (count+7)/8 bytes)
- —–*——-*——*
charstr * 6 * count * text * Network ASCII
- —–*——-*——*
1 2 count
- —–*——-*——————*
list * 7 * count * count-structures *
- —–*——-*——————*
1 2
Postel [page 3]
17 May 78
INTERNET Notebook NSW Data Representation (NSWB8)
Examples
Empty
- —–*
- 1 *
- —–*
Boolean "TRUE"
- —–*—–*
- 2 * 1 *
- —–*—–*
Index "7"
- —–*—–*—–*
- 3 * 0 * 7 *
- —–*—–*—–*
Integer "-3"
- —–*—–*—–*—–*—–*
- 4 * 255 * 255 * 255 * 253 *
- —–*—–*—–*—–*—–*
Bit string "10001111101011"
- —–*—–*—–*—–*—–*
- 5 * 0 * 14 * 143 * 172 *
- —–*—–*—–*—–*—–*
Character string "ABCDE"
- —–*—–*—–*—–*—–*—–*—–*—–*
- 6 * 0 * 5 * A * B * C * D * E *
- —–*—–*—–*—–*—–*—–*—–*—–*
Postel [page 4]
17 May 78
INTERNET Notebook NSW Data Representation (NSWB8)
List of a character string "ABC" and a boolean "FALSE".
- —–*—–*—–*—–*—–*—–*
- 7 * 0 * 2 * 6 * 0 * 3 *
- —–*—–*—–*—–*—–*—–*
- —–*—–*—–*—–*—–*
- A * B * C * 2 * 0 *
- —–*—–*—–*—–*—–*
Postel [page 5]