繁体   English   中英

Integer.toBinaryString() 没有正确转换为二进制

[英]Integer.toBinaryString() not correctly converting to binary

我目前正在研究 Vernam 密码程序,其中很大一部分是将明文转换为二进制的能力。 我研究了如何做到这一点,我发现Integer.toBinaryString()在将明文的每个单独字符转换为二进制时效果最好。 对于大多数字符,此转换有效,但是,我发现了导致我在转换中遇到错误的实例。

例如,每当我运行此代码时: System.out.println(Integer.toBinaryString('€')); 我希望输出为10000000 ,但是,我得到的是10000010101100输出。 根据这个 ASCII 表,我知道扩展的 ASCII 字符可以有一些值的变化,但是,这个表中的大多数字符在扩展的 ASCII 字符部分是准确的,欧元在 ASCII 中由 128 表示。

为什么Integer.toBinaryString('€')返回10000010101100 有没有办法解决这个问题?

根据Java 语言规范第3.10.4 节:

字符文字只能表示 UTF-16 代码单元(第 3.1 节)

当您调用Integer.toBinaryString() ,char 文字被隐式转换(加宽)为int ,因此它被替换为相应的代码单元值,即 8364 表示“€”。 8364 的二进制表示确实是 10000010101100,因此该方法的行为是正确的。

要使用 CP1252 代码页(列在您所指的网站上)对“€”进行编码,您可以使用特定的 Charset 对象:

ByteBuffer buffer = Charset.forName("CP1252").encode("€");
System.out.println(Integer.toBinaryString(buffer.get() & 0xFF)); // prints 10000000

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM