kawasin73 / bitset

Bi-Endian Bit Vector (Array) in Golang
MIT License
8 stars 4 forks source link

バイト列の変換とあまりの部分の処理 #9

Closed kawasin73 closed 5 years ago

kawasin73 commented 5 years ago

bitset では、[]byte[]uint64 に変換する。もし、バイト列の長さが 8 の倍数でない場合にどのように対応するかを考察する

kawasin73 commented 5 years ago

バイト列を拡張しない仕様である ( #6 ) ため、バイト列の長さが 8 の倍数でなくあまりが発生するときの対処法としては以下のものが考えられる。

余った部分を含めた場合最後の要素の uint64 にアクセスしたときに不正なメモリアクセスをすることになるため採用しない。

余った部分を無視して型変換する場合は、余った部分も含めてビットベクトルの処理が行われるとユーザが期待していた場合、その間違いに気づけないためユーザがバグを実装する可能性がある。

エラーを返して型変換する場合は、ユーザの使いやすさが著しく悪くなり柔軟性が落ちるが、ユーザは間違った長さのバイト列を渡したことに気づける利点がある。そのため、 エラーを返して型変換する 手法を採用する。