Java:ByteArray到正数的转换,反之亦然

Java:ByteArray到正数的转换,反之亦然,java,arrays,numbers,biginteger,Java,Arrays,Numbers,Biginteger,我正在寻找一种方法,如何将任意长度的字节[]可逆地转换为正的数字(以数字表示的字符串) BigInteger提供了一个解决方案: byte[] originalBytes = ... String string = new BigInteger(originalBytes).toString(); ... byte[] decodedBytes = new BigInteger(string).toByteArray(); 但是,我不知道如何优雅地去除负值(或在何处存储符号)并保持过程可逆。编

我正在寻找一种方法,如何将任意长度的字节[]可逆地转换为正的数字(以数字表示的字符串)

BigInteger提供了一个解决方案:

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

但是,我不知道如何优雅地去除负值(或在何处存储符号)并保持过程可逆。

编辑:只需替换即可

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

1,
表示传递的数组表示一个正数(=1)

原件:

byte[] originalBytes = ...
String string = new BigInteger(originalBytes).toString();
...
byte[] decodedBytes = new BigInteger(string).toByteArray();
您只需在数组前面加一个零字节:

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"
byte[]original=新字节[]{(字节)255};
System.out.println(新的BigInteger(原始).toString());//打印“-1”
byte[]paddedCopy=新字节[original.length+1];
对于(int i=0;i

这实际上会使符号位为零,使数字无符号。

我不确定如何保持相同的数字,但删除负值。你可以把127加到所有的数字上,但显然所有的数字都是不同的。这个过程是可逆的。澄清“优雅地去除负值”@Tron你是说你收到的字节没有二者的补码形式,换句话说,你是在处理无符号字节吗?你能用一个简单的例子来说明你的问题吗?