私は効率的にそれがNFCタグに保存することができbyte[]
にできるだけ...Java/Android - int配列を最小バイト配列に変換するには?
int[] myInts = {
99999,
9999,
99999,
1,
1234567890,
24385933,
99
};
...このようなint配列に変換する必要があります。
私は2つの答え( hereと here)を試してみました、そこから this very similar questionを見てきました、彼らは両方の作成バイト配列が、残念ながら28
の長さを持っているが、それは、私として私のためには良いません最大長が16のバイト[]を作成する必要があります(このデータを保存するタグはMIFARE Ultralight EV1です)。
myInts
をbyte[16]
に変換するための他の方法はありますか?
各整数は4バイトです。 7 x 4 = 28、唯一の方法は、それらの値の一部が<= 255で、その値に1バイトを使用できることがわかっている場合です。 – cyroxis
配列の値には既知の制約がありますか?たとえば、配列の要素の一部が-128〜127の範囲内にあることがわかっている場合、それらを4バイトではなく1バイトに格納できます。 – Eran
数学的にもこれを行うことができる唯一の方法は、圧縮する必要のある配列に対して2 ^(8 * 16)= 2^128より小さい可能性があることを証明できる場合です。それが不可能であれば、あなたは100%幸運です。あなたがどれほど賢いものであっても、それほど多くの圧縮を行うことはできません。 –