【问题标题】:Java: ByteArray to positive number and vice versa conversionJava:ByteArray 到正数,反之亦然转换
【发布时间】:2017-01-25 15:18:32
【问题描述】:

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

BigInteger 提供了一个解决方案:

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

但是,我不确定如何优雅地摆脱负值(或在哪里存储符号)并保持过程可逆。

【问题讨论】:

  • 我不确定如何保持相同的数字但删除负值。您可以将 127 加到所有数字上,但显然所有数字都会有所不同。不过这个过程是可逆的。
  • 澄清“优雅地摆脱负面价值观”
  • @Tron 你是说你收到的字节没有二进制补码形式,换句话说你正在使用无符号字节?你能用一个简单的例子来扩展你的问题吗?

标签: java arrays numbers biginteger


【解决方案1】:

编辑:只需替换

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

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

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

原文:

你可以在数组前面加上一个零字节:

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"

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-05
    • 2011-04-17
    • 2021-11-23
    • 2014-09-20
    • 1970-01-01
    • 2010-12-03
    • 2011-10-08
    相关资源
    最近更新 更多