将 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])));