2017-01-25 13 views
1

私は、任意の長さのバイト[]をの正のの数値(数字の文字列表現)に可逆的に変換する方法を探しています。Java:ByteArrayを正の数に変換する逆の変換をする

のBigIntegerは、ソリューションを提供しています:

byte[] originalBytes = ... 
String string = new BigInteger(originalBytes).toString(); 
... 
byte[] decodedBytes = new BigInteger(string).toByteArray(); 

をしかし、私は優雅に負の値(またはどこ記号を保存する)と可逆過程を保つを取り除くするかどうかはわかりません。

+0

同じ数字を残しても、負の値を取り除く方法はわかりません。あなたはすべての数字に127を加えることができますが、明らかにすべての数字は異なっています。プロセスは可逆的になります。 –

+0

「負の値を正常に取り除いてください」 –

+0

@Tron受け取ったバイトに2の補数形式がない、つまり符号なしバイトを扱っていると言っていますか?希望の結果の簡単な例であなたの質問を拡大できますか? –

答えて

3

編集:

:ちょうど渡された配列は、オリジナル正の数(= 1 signum

を表す1,信号

String string = new BigInteger(1, originalBytes).toString(); 

String string = new BigInteger(originalBytes).toString(); 

を交換

あなただけのゼロのバイトで配列の前に付けることができます。

byte[] original = new byte[] { (byte) 255 }; 

System.out.println(new BigInteger(original).toString()); // prints "-1" 

byte[] paddedCopy = new byte[original.length + 1]; 
for (int i = 0; i < original.length; i++) { 
    paddedCopy[i + 1] = original[i]; 
} 
System.out.println(new BigInteger(paddedCopy).toString()); // prints "255" 

これは、本質的に数が符号なし作り、符号ビットを無効にします。

関連する問題