我创建了一个简单的应用程序,如下所示:
String stringValue = new String(new byte[] { 0x00, 0x00, 0x00, 0x25 }, "273");
byte[] valueEncoded = Arrays.copyOfRange(stringValue.getBytes("273"), 0, 4);
int finalResult = ByteBuffer.wrap(valueEncoded).getInt();
System.out.println("Result: "+finalResult);
我预计结果是 37,但结果却是 21。这是怎么回事?我错过了什么吗?或者我的方法不是应该的方式,因此会弹出此错误?
我尝试了许多其他数字,似乎都工作正常......
正如您所看到的,我使用的是代码页 273 (IBM)。
在我看来,换行符 0x25 已映射到换行符 0x15。
我认为事情是这样的:
字节到字符串:EBCDIC 0x25 -> UTF-16 0x000A
字符串到字节:UTF-16 0x000A -> EBCDIC 0x15。
为什么这是首选,我无法猜测。好吧,实际上我可以猜测(但这只是猜测)。 0x000A 是许多系统上的标准行终止符,但它通常输出为“移至下一行的开头”。 “可能”转换为 IBM 273,因为文本注定要在使用该代码页的设备上输出,并且此类设备可能需要 NL 而不是 LF 来开始新行。
假设得到验证:
class D {
public static void main(String... a) throws Exception {
String lf = "\n";
byte[] b = lf.getBytes("273");
System.out.println((int)b[0]);
}
}
输出为21。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)