在我的Java程序中,我需要一个来自Hex String的字节数组。所以我做了以下事情:
byte[] key=HexUtils.convert("0AA387ED291F6D90");
这会将Hex String转换为字节数组,如下所示:
输出:Byte Array: key:[10, -93, -121, -19, 41, 31, 109, -112]
现在,我想将Hex String移动到属性文件中。但我无法这样做。
Try 1:
Properties file ====> key=0AA387ED291F6D90
Java Program ====> byte[] key = HexUtils.convert(prop.getProperty("key"));
这会产生错误:BAD HEXADECIMAL DIGIT
Try 2:
Properties file ====> key=\u000A\u00A3\u0087\u00ED\u0029\u001F\u006D\u0090
Java Program ====> byte[] key = HexUtils.convert(prop.getProperty("key"));
Output: key:[10, -93, 63, -19, 41, 31, 109, 63]
如果您注意到,2个字节与预期不同。十六进制87和十六进制90.两者都转换为63.而我期望分别为-121和-112。
有人可以帮助我如何进行此转换。我希望我很清楚!
•安格德
答案 0 :(得分:1)
如果使用\uxxxx
代码,则使用UNICODE转义序列。 \u0090
最终不会被解释为String "90"
,它最终会成为与UTF-16编码中的代码单元0090对应的单个字符。
你的第一种方法应该有效。我建议您尝试System.out.println(prop.getProperty("key"));
或其他形式的输出,并检查是否有前导或尾随空白区域,某些字符您没有预料到或null
。后者意味着找不到“钥匙”的属性。
答案 1 :(得分:0)
似乎我遇到了一些字节问题,因为字节是有符号的,但是当你从字符串转换时,大于127的值会引起问题,因为它们太大了。
我想我最终一次解析一对十六进制对并将它们转换为整数并将它们存储为字节。
此外,根据您正在做的事情,您可能会将它们保留为整数,因为在进行计算之前,字节会在内部转换为整数,因此整数会更快。