【问题标题】:Parse signed Byte from binary | Java从二进制解析签名字节 |爪哇
【发布时间】:2022-01-19 15:26:07
【问题描述】:

我在 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 中的二进制文件中解析 signed 字节? 提前致谢!

【问题讨论】:

    标签: java binary byte numberformatexception


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2012-01-17
        • 1970-01-01
        • 2011-06-24
        • 2010-11-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-27
        相关资源
        最近更新 更多