从二进制文件中解析带符号的字节 | Java

Parse signed Byte from binary | Java

我在 Java 中遇到以下问题。我正在使用一种可以产生负字节作为结果的加密算法,出于我的目的,我必须能够以二进制形式处理它们。对于负字节,8 中的第一个或最高有效位是 1。当我稍后尝试将二进制字符串转换回字节时,我得到一个 NumberFormatException,因为我的字节太长了。我可以告诉 Java 将其视为无符号字节并以负字节结尾吗?到目前为止我的代码是这样的:

private static String intToBinByte(int in) {
        StringBuilder sb = new StringBuilder();
        sb.append("00000000");
        sb.append(Integer.toBinaryString(in));
        return sb.substring(sb.length() - 8);
}
intToBinByte(-92); // --> 10100100
Byte.parseByte("10100100", 2) // --> NumberFormatException
Value out of range. Value:"10100100" Radix:2

是否有更好的方法从 Java 中的二进制文件中解析 有符号 字节? 提前致谢!

我写了下面的函数来解决这个问题:

private static byte binStringToByte(String in) {
    byte ret = Byte.parseByte(in.substring(1), 2);
    ret -= (in.charAt(0) - '0') * 128;
    return ret;
}

您可以用更大的类型解析它,然后将其转换为字节。转换只是截断位数:

byte b = (byte) Integer.parseInt("10100100", 2);