当前位置: 首页 > 知识库问答 >
问题:

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

黄泰宁
2023-03-14

我在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中,有没有更好的方法从二进制文件解析有符号字节?提前谢谢!

共有1个答案

上官高翰
2023-03-14

我编写了以下函数来解决此问题:

private static byte binStringToByte(String in) {
    byte ret = Byte.parseByte(in.substring(1), 2);
    ret -= (in.charAt(0) - '0') * 128;
    return ret;
}
 类似资料:
  • 我在理解JavaIO类中的一些概念时有些困难。例如,有两种类型的流,字节流和字符流。据我所知,字节流逐个字节读取。 1.如果java中的char存储为16位(2字节)的数据类型,那么我怎么可能使用面向字节的输入流从文件中准确读取char,比如'A',例如FileInputStream? 2。是因为我使用的字符(在ascii图表上大多在0到122之间)存储在分配的两个字节中的一个字节中吗? 3. D

  • 本文向大家介绍解析Python中的二进制位运算符,包括了解析Python中的二进制位运算符的使用技巧和注意事项,需要的朋友参考一下 下表列出了所有的Python语言的支持位运算符。假设变量a持有60和变量b持有13,则: 示例: 试试下面的例子就明白了所有的Python编程语言提供了位运算符: 当执行上面的程序它会产生以下结果:

  • 我在解析antlr4中的格式行列表时遇到了一个问题 但这是失败的第一个字符识别'*'本身,这使我困惑。 第1行:0不匹配的输入'*这是一个字符串',应为'*'

  • 问题内容: 我有一个二进制字符串,如下所示: 我希望我的INT的值是代替 实现此目标的最佳方法是什么? 问题答案: 使用Where 是您的方案无法表示的最小正数。(在这种情况下为8,因为为7且为负。) 大于,所以你减去的,给。

  • 问题内容: 我在C#中有一个应用程序,它使用RijndaelManaged 加密 部分文件 (因为它们是大文件)。因此,我将文件转换为字节数组并仅对其一部分进行加密。 然后,我想使用Java解密文件。因此,我只需要解密用C#加密 的文件的一部分 (意味着那些字节)。 问题来了。因为在C#中,我们 有无符号字节 ,在Java中,我们有 符号字节 。因此,我的加密和解密无法按照我想要的方式工作。 在C

  • 问题内容: Java中的字节默认为带符号的。我在其他帖子上看到具有无符号字节的解决方法类似于以下内容: 有人可以向我解释为什么这样做有效,并将有符号字节转换为无符号字节,然后将其转换为整数吗?具有11111111的字节导致相同的字节-对吗? 问题答案: 类型转换的优先级高于运算符。因此,您首先要转换为一个int,然后再进行ANDing以掩盖所有已设置的高阶位,包括java所用的二进制补码表示法的“