转换ASCII值以十六进制值
问题描述:
我具有由作为00bff040dadd1fde55
十六进制字母这样的文字串,我希望将字符串转换成它的hex“等效”以字节为单位,即到字节数组如{0x00 0xBF 0xF0 0x40 0xDA 0xDD 0x1F 0xDE 0x55}
转换ASCII值以十六进制值
有没有可以做这种转换的Java类?如果没有,有没有人有我可以执行上述转换的算法?
答
如果你的意思是你要的字符串分隔成十六进制的字节,可以使用正则表达式:
String s = "00bff040dadd1fde55";
String hex = "{" + s.toUpperCase().replaceAll("(..)", "0x$1 ").trim() + "}";
System.out.println(hex);
打印:
{0x00 0xBF 0xF0 0x40 0xDA 0xDD 0x1F 0xDE 0x55}
如果你的意思是你想有一个字节数组结果:
int size = s.length()/2;
byte[] arr = new byte[size];
for (int i = 0; i < size; i++) {
arr[i] = (byte) Integer.parseInt(s.substring(i * 2, i * 2 + 2), 16);
}
为了证明该数组包含右字节:
个for (int i = 0; i < arr.length; i++) {
System.out.print(String.format("%02X ", arr[i]) + " ");
}
打印:
00 BF F0 40 DA DD 1F DE 55
答
是否有一个Java类,它可以做到这一点的转换?
有在将含有十六进制字符的字符串转换成字节数组...那样标准库中没有的类。
如果不是,有没有人有一个算法,我可以实现上述转换?字符串的
- 除以长度2,并分配该大小的字节数组。
-
重复直到字符串是空的:
- 删除包括前两个字符的子字符串。
- 使用
Integer.parseInt(twoChars, 16)
转换为整数。 - 将整数转换为字节并添加到字节数组中。
该算法可以很容易地转换为Java代码。
1 - 如果你真的想要的字节序列表示为一个字符串“文本”,然后再看@ aetheria的答案...
虽然这是正确的,我认为这个问题是相当混乱,我想它要求转换成一个字节数组,而不是一串整齐格式化的字节值。 – biziclop
是的,我不确定。我已经添加了两个不同的结局。希望他们中的一个会很开心。 –
@aetheria是的,一个字节数组是我想要的。我编辑了这个问题来说明问题。感谢您的示例代码! –