将 ASCII 码转换为十六进制码
convert ASCII into Hex
我有一个 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();
}
}
});
Code page 850 is not ASCII。 ä
不是 ASCII 字符。您的其他字符示例也无法正常工作。
发生的事情是这些字符的值,作为字节,是负数,因为 byte
是 Java 中的有符号类型。 (例如,ä
是 -124。)-124 在二进制补码十六进制中作为 int
是 0xFFFFF84。您可以通过将它添加到 256 来获得它的无符号版本,以获得 132 (0x84)。然后你转换为十六进制就可以了。
首先,“ä”的十六进制值不是0x84,而是0x7B。
要检查所有十六进制值,请参考标准 "ETSI TS 123 038 V14.0.0 (2017-04)".
现在对于编码部分,我已经制作了一个函数,它根据给定标准采用任何 ASCII 字符和 returns 其十六进制值。由于我不想 post 该代码,因为它会被填满,所以我想指导您编写自己的代码。
步骤:
1. 首先参考给定的文档,理解给定的字符tables。
2. 根据索引值创建一个列表,其中包含 table 中给出的所有字符。
3.制作一个函数,提取给定字符的索引位置,并制作实际的十六进制数。请记住为扩展字符集编写额外的功能。
希望对您有所帮助。 :-)
您必须将字节值 无符号转换 为 int,例如
hexa.append(Integer.toHexString((int) chars[i] & 0xFF));
或(Java 8)
hexa.append(Integer.toHexString(Byte.toUnsignedInt(chars[i])));
我有一个 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();
}
}
});
Code page 850 is not ASCII。 ä
不是 ASCII 字符。您的其他字符示例也无法正常工作。
发生的事情是这些字符的值,作为字节,是负数,因为 byte
是 Java 中的有符号类型。 (例如,ä
是 -124。)-124 在二进制补码十六进制中作为 int
是 0xFFFFF84。您可以通过将它添加到 256 来获得它的无符号版本,以获得 132 (0x84)。然后你转换为十六进制就可以了。
首先,“ä”的十六进制值不是0x84,而是0x7B。 要检查所有十六进制值,请参考标准 "ETSI TS 123 038 V14.0.0 (2017-04)".
现在对于编码部分,我已经制作了一个函数,它根据给定标准采用任何 ASCII 字符和 returns 其十六进制值。由于我不想 post 该代码,因为它会被填满,所以我想指导您编写自己的代码。
步骤: 1. 首先参考给定的文档,理解给定的字符tables。 2. 根据索引值创建一个列表,其中包含 table 中给出的所有字符。 3.制作一个函数,提取给定字符的索引位置,并制作实际的十六进制数。请记住为扩展字符集编写额外的功能。
希望对您有所帮助。 :-)
您必须将字节值 无符号转换 为 int,例如
hexa.append(Integer.toHexString((int) chars[i] & 0xFF));
或(Java 8)
hexa.append(Integer.toHexString(Byte.toUnsignedInt(chars[i])));