我希望能够将原始UTF-8字符串转换为十六进制字符串。 在下面的示例中,我创建了一个包含2个字母的样本UTF-8字符串。 然后我试图获得十六进制值,但它给出了负值。
我怎样才能让它 05D0 和 05D1
String a = "\u05D0\u05D1";
byte[] xxx = a.getBytes("UTF-8");
for (byte x : xxx) {
System.out.println(Integer.toHexString(x));
}
谢谢。
答案 0 :(得分:5)
如果您需要代码点,请不要转换为UTF-8等编码。使用Character.codePointAt。
例如:
Character.codePointAt("\u05D0\u05D1", 0) // returns 1488, or 0x5d0
答案 1 :(得分:3)
出现负值是因为byte
的范围是-128到127.以下代码将产生正值:
String a = "\u05D0\u05D1";
byte[] xxx = a.getBytes("UTF-8");
for (byte x : xxx) {
System.out.println(Integer.toHexString(x & 0xFF));
}
主要区别在于它输出x & 0xFF
而非x
,此操作会将byte
转换为int
,并删除该符号。