基本的に、私が欲しいのはのような文字列を変換することです "123456"
符号なしバイト配列へ [1, 226, 64]
。しかし、私は至る所で見て、私が見つけたものは2の補数(符号付き)バイト配列を得ることです [1, -30, 64]
:
byte[] array = new BigInteger("123456").toByteArray();
System.out.println(Arrays.toString(array));
出力:
[1, -30, 64]
それでは、どうやってそれをJavaで行うことができるのでしょうか。出力を次のようにします。
[1, 226, 64]
編集: byteは127までしか保持できないことがわかっているので、byte配列の代わりにint配列にする必要があります。
回答:
回答№1は4Javaには符号なし型がないため、値をint配列に格納する必要があります。
byte[] array = new BigInteger("123456").toByteArray();
int[] unsigned_array = new int[array.length];
for (int i = 0; i < array.length; i++) {
unsigned_array[i] = array[i] >= 0 ? array[i] : array[i] + 256;
}
かなり簡単です。
回答№2については2
Javaは符号なしバイトを持っていないので、それらを符号なしであるかのようにintに変換するには、それらをビットごとにANDする必要があります(&
int付き) 0xFF
:
byte[] array = new BigInteger("123456").toByteArray();
for (int i = 0; i < array.length; i++) {
System.out.println(0xFF & array[i]);
}
出力:
1
226
64
あなたは必ずしも必要ではない 格納 int配列としてそれらを - それはあなたが彼らと何をしたいのかに依存します...