Closed kawasin73 closed 5 years ago
バイト列を拡張しない仕様である ( #6 ) ため、バイト列の長さが 8 の倍数でなくあまりが発生するときの対処法としては以下のものが考えられる。
[]uint64
に型変換する(長さは (len(buf) + 7) / 8
になる)[]uint64
に型変換する(長さは len(buf) / 8
になる)余った部分を含めた場合最後の要素の uint64 にアクセスしたときに不正なメモリアクセスをすることになるため採用しない。
余った部分を無視して型変換する場合は、余った部分も含めてビットベクトルの処理が行われるとユーザが期待していた場合、その間違いに気づけないためユーザがバグを実装する可能性がある。
エラーを返して型変換する場合は、ユーザの使いやすさが著しく悪くなり柔軟性が落ちるが、ユーザは間違った長さのバイト列を渡したことに気づける利点がある。そのため、 エラーを返して型変換する 手法を採用する。
bitset では、
[]byte
を[]uint64
に変換する。もし、バイト列の長さが 8 の倍数でない場合にどのように対応するかを考察する