Skip to content

Latest commit

 

History

History
93 lines (80 loc) · 3.49 KB

protocol.md

File metadata and controls

93 lines (80 loc) · 3.49 KB

how to:

test_hash = {"do_we_test?" => true,
                "more_data" => [
                    1.2,
                    2.3,
                    nil,
                ],
                1428 => false,
                :another_key => "data string",
            }
data = __test_serialize(test_hash)
__debug_save(data, "debug_data.bin")

legend:

u unsigned
s signed
le little endian
be big endian
not representable ASCII
θ 0 / NULL
type size (in bytes) representation
byte 1 u, le
mrb_int 8 s, le
mrb_float 8 s, le
st_counter_t 2 u, le
ruby type id
ST_FALSE 0
ST_TRUE 1
ST_INT 2
ST_FLOAT 3
ST_SYMBOL 4
ST_HASH 5
ST_ARRAY 6
ST_STRING 7
ST_UNDEF (unused) 8
ST_NIL 9

every ruby types uses one byte for identification

example data:

|    | 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F | ASCII            |                                          | text             |
|------------------------------------------------------|------------------|
| 00 | 05 04 00 07 0C 00 64 6F 5F 77 65 5F 74 65 73 74 | ……θ……θdo_we_test |
| 10 | 3F 00 01 07 0A 00 6D 6F 72 65 5F 64 61 74 61 00 | ?θ………θmore_dataθ |
| 20 | 06 03 00 03 33 33 33 33 33 33 F3 3F 03 66 66 66 | ……θ…333333…?…fff |
| 30 | 66 66 66 02 40 09 02 94 05 00 00 00 00 00 00 00 | fff…@…………θθθθθθθ |
| 40 | 04 0C 00 61 6E 6F 74 68 65 72 5F 6B 65 79 00 07 | ……θanother_keyθ… |
| 50 | 0C 00 64 61 74 61 20 73 74 72 69 6E 67 00       | …θdata_stringθ   |
(00)    05                          type            ST_HASH
(01)    04 00                       st_counter_t    4
(03)    07                          type            ST_STRING
(04)    0C 00                       st_counter_t    12
(06)                                CSTRING         do_we_test?θ
(12)    01                          type            ST_TRUE
(13)    07                          type            ST_STRING
(14)    0A 00                       st_counter_t    10
(16)                                CSTRING         more_dataθ
(20)    06                          type            ST_ARRAY
(21)    03 00                       st_counter_t    3    
(23)    03                          type            ST_FLOAT
(24)    33 33 33 33 33 33 F3 3F     mrb_float       1.2
(2C)    03                          type            ST_FLOAT
(2D)    66 66 66 66 66 66 02 40     mrb_float       2.3
(35)    09                          type            ST_NIL
(36)    02                          type            ST_INT
(37)    94 05 00 00 00 00 00 00     mrb_int         1428
(3F)    00                          type            ST_FALSE
(40)    04                          type            ST_SYMBOL
(41)    0C 00                       st_counter_t    12
(42)                                CSTRING         another_keyθ
(4F)    07                          type            ST_STRING
(50)    0C 00                       st_counter_t    12
(52)                                CSTRING         data stringθ