数値のバイト数をしっかり測ってキワキワまで小さくすることでデータを圧縮する。

タグ部データ部と続く。データ部は1バイト区切り、タグ部は1bitずつ読む
1 続く1bitで0か1を表す
011 データ部1バイトで+127 to -128 を表す
0101 続く4bitでバイト数を表し、そのバイト数分データ部に文字列を形成。0-15バイトまでの文字列を表す。
0100_1 nullを表す
0100_01 続く1bitでboolを表す。動的型言語でbitと区別したい場合に使える。
0100_001 10進数を表す。続く4bitでバイト数を表し、1-16バイトの整数を表す。続く1バイトで小数点の位置を表現。255桁の小数が理論上可能であるが、16バイト整数は40桁ぐらいである。1ならば小数点1桁、2ならば2桁・・・と点が左にずれていく。
0011 続く3bitでバイト数を表し、1-8バイトの整数を表す。
0010_1 データ部1バイトでバイト数を表し、その後のデータ部で実際の文字列を形成。255バイトまでの文字列を表す。
0010_01 8バイト浮動小数を表す
0010_001 続く3bitでバイト数(1-8)を表し、そのバイトが表すlengthの文字列を表す。8バイトの表す約2000京バイト分の文字列が表せる
0010_0001 4バイト浮動小数を表す。静的型言語なら4byte整数にtruncateでもいいし、動的型言語でfloatが使われてるのを知らないから、なくてもよさそうなものだが、あってもよいだろう。
0001_1 Binary(u8) 続く3bitでバイト数(1-8)、そのバイトでlengthを表し、続くlengthバイトでバイナリを表す
0001_01 Binary(u64) 続く3bitでバイト数(1-8)、そのバイトでlengthを表し、続くlength*8バイトでバイナリを表す Vecのtransmuteができないということで、個別に作ることにした
0001_001 Binary(u32) 続く3bitでバイト数(1-8)、そのバイトでlengthを表し、続くlength*4バイトでバイナリを表す
0001_0001 Binary(u16) 続く3bitでバイト数(1-8)、そのバイトでlengthを表し、続くlength*2バイトでバイナリを表す
0000_11 undefined0を表す
0000_101 undefined1を表す
0000_10..1 undefined Nを表す。現状7まで


0,1を2bitで表せるので、任意桁数の数値とかも2進数に分解して倍のbit数をかければ表せるはずである。

タグ部のはじまり
最初の1バイトは次の数値のバイト数を表す。続くバイトでタグ部のタグ数を表す。タグが全部終わったら、次のバイトからはデータ部である。

