[英]Convert the hexadecimal string representation of some bytes into a byte array in Java
[英]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.