データの切れ目がわからない?COBSを使え…
りn
データの切れ目がわからない?COBSを使え…
- 1バイトごとにデータをするためのストリームがあるとする
- しかしデータの切れ目がわからない…
俺が考えたアイデア
- 8ビット区切りのデータを7ビットごとに区切り直して、先頭ビットに1を立てれば識別できるのでは?
- 効率悪い
- 1024バイト(8192ビット)送る場合、1024*8/7=1171バイト必要
- 所詮素人の考えたアイデア…(泣)
COBSとは?
エンコード
- 先に1パケットのサイズを決めておく(255バイトとすることが多いらしい、1バイトに収まるから)
- 空の配列(バイト列)を用意し、先頭に長さを格納するための要素を一つ追加する
- 255バイトに達するか、0が見つかるまで、配列に元データを追加しながら先頭要素をインクリメントし続ける
- これを元データの終端まで繰り返す
- 末尾に0を挿入する
デコード
- エンコードされた配列の先頭バイトを見て、その長さ分読み出す
- 長さが255未満であれば0を追加、そうでない場合はなにもしない
- これをエンコードされた配列の終端まで繰り返す
注意点
- エンコードされた配列の長さは多少増減するため、最悪の場合の長さを見積もっておく必要あり
- 例:
かしこい!