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

无法正确转换二进制文件

谢璞
2023-03-14

我试着这样读:

static void branjeIzDatoteke(String location){
    byte[] allBytes = new byte[10000];
    try {
        InputStream input = new FileInputStream(location);
        int byteRead;
        int j=0;
        while ((byteRead = input.read())!=-1){
            allBytes[j] = (byte)input.read();
        }
        String str = new String(allBytes,"UTF-8");

        for (int i=0;i<=str.length()-8;i+=8){
            //int charCode = Integer.parseInt(str.substring(i,i+8),2);
            //System.out.println((char)charCode);

            int drek = (int)str.charAt(i);
            System.out.println(Integer.toBinaryString(drek));
        }
    } catch (IOException ex) {
        Logger.getLogger(Slika.class.getName()).log(Level.SEVERE, null, ex);
    }

}

我尝试只打印出字符串(当我创建string str=new string(allBytes,“UTF-8”)时),但我得到的只是开头的一个正方形,然后是70多个没有文本的空行。然后我尝试了int charCode=integer.parseint(str.substring(I,I+8),2);并打印出每个单独的字符,但我得到了一个NumberFormatException。我甚至尝试了转换,最后我尝试了Integer.ToBinaryString,但在本例中,我得到了1和0。这不是我想要的,我需要阅读实际的文本,但没有任何方法似乎是有效的。在使用我已经尝试过的方法之前,我实际上读过一个二进制文件:int charCode=integer.parseint(str.substring(I,I+8),2);System.out.println((char)charCode);但就像我说的,我得到一个NumberFormatException。我不明白为什么这些方法行不通。

共有1个答案

赵飞雨
2023-03-14

如果要读取所有字节,可以使用java.nio.file.files实用工具类:

Path path = Paths.get("test.p2b");
byte[] allBytes = Files.readAllBytes(path);
String str = new String(allBytes, "UTF-8");
System.out.print(str);

str内容进行迭代可能不起作用。某些UTF字符表示为代理对,即可以跨越多个char的代码点(如本文所述)。由于您使用的是UTF,因此应该使用String#codePoinst()方法来迭代代码点,而不是字符。

 类似资料:
  • 我有下一个代码,它试图将双精度类型的数字转换为二进制形式。我知道这个算法,数字的整数部分可以像整型数字一样转换成二进制,剩下的分馏部分可以这样转换: 这是转换整数部分的代码 问题是我必须以双数查看RAM内存的方式打印整个数字(8字节格式),例如,如果我有数字42.375,结果必须是101010.011。但是我不知道如何组合时()和for()的二进制数并将它们放入64位的数组中,例如: |00000

  • 问题内容: 如何将文件转换为二进制文件?我的项目只需要它。我需要通过二进制文件加密文件。 问题答案: 如果您要访问ACTUAL BINARY形式,则读入文件并将每个字节转换为二进制表示形式… 编辑: 以下是一些代码,可将字节转换为带有位的字符串: 如果要访问文件中的字节,则只需使用以下代码(在第一种情况下也可以使用此代码): 要使用这两段代码,您现在可以遍历每个字节并使用以下位创建一个String

  • 本文向大家介绍十进制到二进制转换,包括了十进制到二进制转换的使用技巧和注意事项,需要的朋友参考一下 十进制数字也可以转换为二进制格式。要将十进制数转换为二进制数,我们需要将数字除以2,直到达到0或1。然后,在每一步骤中,其余部分将分开存储以形成相反的二进制等效数。 在此算法中,我们将遵循递归方法。这将帮助我们在不使用堆栈数据结构的情况下解决问题。在实现中,我们知道函数的递归将遵循内部堆栈。我们将使

  • 在你学习计算机的过程中,你可能已经接触了二进制。二进制在计算机科学中是很重要的,因为存储在计算机内的所有值都是以 0 和 1 存储的。如果没有能力在二进制数和普通字符串之间转换,我们与计算机之间的交互非常棘手。 整数值是常见的数据项。他们一直用于计算机程序和计算。我们在数学课上学习它们,当然最后用十进制或者基数 10 来表示它们。十进制 $$233_{10}$$ 以及对应的二进制表示 $$1110

  • 我如何将一个写为二进制的字符串转换为二进制(字节数组)? 如果我有一个字符串: 下面是当我将二进制设置为字节数组时发生的情况(字节数组返回48,这是ASCII) 我不擅长解释,所以希望上面的例子足以告诉你我想要什么。

  • 我正在尝试将数字从十进制值转换为其IEEE 752形式。例如: 我写了这个方法: 有个问题我解决不了,我再举个例子说清楚。 但是当数字为负数时,例如 我收到以下错误: 这意味着我的代码可以完美地处理正数(包括零),但如果是负数,代码就会崩溃。问题出在哪里? 笔记 我想我可以用这种方式解决我的问题 检查是否有一个字符At(0)等于1 如果是(numero.charAt(0)==1),则删除第一个字符