byte[]
外部入力からを取得しています。各バイトには2つの4ビット値が格納されています。私の仕事は、この密集した配列からインデックスidxの4ビット値を読み取ることです。私はそのようなコードを書いたことがないので、以下の解決策が正しいかどうか、そして正しい場合は、それを行うためのより最適な方法があるかどうか疑問に思います。(「自分でテストしてみませんか」というコメントは避けてください。テストでは、何かの正しさを証明することはできず、不正確さだけを証明することができます...)。
したがって、バイトと値は次のようになります(各[]は1つですbyte
):
[value0|value1] [value2|value3] [value4|value5] [value6|value7]
そして、インデックスを使用して値を取得する必要がありますidx
。明らかに:
- iが偶数の場合、式は次のようになります。
array[idx/2] & 0xF0
- iが奇数の場合、式は次のようになります。
array[idx/2] & 0x0F
したがって、コードは次のとおりです。
if (idx % 2 == 0) {
return array[idx/2] & 0xF0;
}
return array[idx/2] & 0x0F;
これは正しく、最適ですか?
「クイック」リーダーの更新:正しくありません。回答を参照してください。