【发布时间】:2017-08-02 07:30:11
【问题描述】:
我有一个 Gui,我想将 ASCII 转换为十六进制,但它打印我的是 fffff84 而不是 84。这只发生在 ä、ö、ü。出了什么问题?
示例输入:
ä
输出:
ffffff84
我的代码:
asciihex.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
output6.setText("");
String hexadecimal2 = input4.getText().replace("\n", "");
byte[] chars;
try {
chars = hexadecimal2.getBytes("CP850");
StringBuffer hexa = new StringBuffer();
for(int i = 0;i<chars.length;i++){
hexa.append(Integer.toHexString((int) chars[i]));
}
output6.append(hexa.toString());
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
}
});
【问题讨论】:
-
ASCII 实际上是一个 7 位编码方案(值从
0到127(0x7f))。0x84可能是 extended ASCII 的一部分,但不是标准的。如果存储在有符号字节中(使用two's complement),它也是一个负数。因为它是负数,所以如果将有符号字节存储在更大的有符号整数类型中,它会得到符号扩展。 -
CP850不是ASCII。 -
Code page 850 不是ASCII。而
ä不是 ASCII 字符。 -
@saka1029 为什么不是 ASCII?
-
@Starlight:出于同样的原因,西班牙语不是英语,尽管有一些共同点。只是不是。有关详细信息,请参阅我上面评论中的链接。
标签: java hex ascii data-conversion