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位