繁体   English   中英

为什么在Java中进行十六进制/字符串/字节转换后,我得到3个字节而不是1个字节?

[英]Why am i getting 3 bytes instead 1 byte after hexadecimal/string/byte conversion in java?

我有这个程序:

    String hexadecimal = "AF";
    byte decimal[] = new byte[hexadecimal.length()/2];

    int j = 0;
    for ( int i = 0; i < decimal.length; i++)
    {
        decimal[i] = (byte) Integer.parseInt(hexadecimal.substring(j,j+2),16); //Maybe the problem is this statement
        j = j + 2;
    }

    String s = new String(decimal);
    System.out.println("TOTAL LEN: " + s.length());

    byte aux[] = s.getBytes();
    System.out.println("TOTAL LEN: " + aux.length);

第一个总数是“ 1”,第二个总数是“ 3”,我想我会在第二个总数中得到“ 1”。 为什么会这样呢? 我的意图是生成另一个具有与原始字符串(AF)相同值的十六进制字符串,但是我遇到了这个问题。

问候!

PD对不起,我的英语,请告诉我我自己的解释是否很好。

不知道您到底想达到什么目标。 但是请在下面找到您正在做的事情。

Integer.parseInt(hexadecimal.substring(j, j + 2), 16)返回175 (byte) 175是-81 new String(decimal)尝试从与您当前字符集相关的字节数组中创建一个String (可能是UTF -8)

由于字节数组不包含UTF-8字节的有效表示形式,因此创建的String包含Unicode码点U+FFFD的“ REPLACEMENT CHARACTER”。 此代码点的UTF-8字节表示形式为EF BF BD (或-17 -65 -67)。 这就是第二长度为三的原因。

在这里查看Wikipedia UTF-8 代码点<= 7F任何字符都可以用一个字节表示。 对于所有其他字符,第一个字节必须具有设置为11......的位7和6。 对于值-81来说10101111 那里是无效的代码点,已被“ REPLACEMENT CHARACTER”取代。

暂无
暂无

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

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