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]