java中0x66756e63与10211711099的区别是什么

java中0x66756e63与10211711099的区别是什么,java,char,byte,Java,Char,Byte,我尝试了这个代码并打印了字节。但这是一个问题 InputStream localInputStream = new FileInputStream(new File(srcName)); int len = localInputStream.available(); byte[] arrayOfByte1 = new byte[len]; localInputStream.read(arrayOfByte1, 0, len);

我尝试了这个代码并打印了字节。但这是一个问题

        InputStream localInputStream = new FileInputStream(new File(srcName));
        int len = localInputStream.available();
        byte[] arrayOfByte1 = new byte[len];
        localInputStream.read(arrayOfByte1, 0, len);
        for(int i = 0; i < len; i++) {
            System.out.println(arrayOfByte1[i]);
        }
结果:

纯文本:func

十六进制代码:66 75 6E 63在十六进制编辑器中

此代码的结果:102 117 110 99


为什么会出现这个问题?我在等待答案。谢谢。

当您将数字转换为字符串时,例如通过打印数字,或使用string.valueOf或Byte.toString,与大多数语言一样,Java默认情况下总是使用十进制

如果你想用十六进制打印它,你可以使用Integer.toHexString,不过请注意它不会添加前导零-14变成E,而不是0E

System.out.println(Integer.toHexString(arrayOfByte1[i]));

它真的在数字之间打印B吗?你知道十六进制16和十进位10之间的区别了吧?crtl+R->calc->enter->View->Programmer->102->Hex->Eureka!哇!你发现了我的错误。谢谢。顺便说一句:以这种方式使用available是不正确的。它可以给你任何结果,不能是总长度。或者你可以使用System.out.printf%02bx%n、/*autoboxing*/arrayOfByte1[i];它将以十六进制打印,前导零为2位