【问题标题】:Hex Value from Properties file : JAVA属性文件中的十六进制值:JAVA
【发布时间】:2011-12-21 21:47:35
【问题描述】:

在我的 Java 程序中,我需要一个十六进制字符串中的字节数组。所以我做了以下事情:
byte[] key=HexUtils.convert("0AA387ED291F6D90");

这会将十六进制字符串转换为字节数组,如下所示:
输出:Byte Array: key:[10, -93, -121, -19, 41, 31, 109, -112]

现在,我想将十六进制字符串移动到属性文件中。但是我做不到。

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 个字节与预期不同。 Hex 87 和 Hex 90。两者都转换为 63。而我期望分别为 -121 和 -112。

有人可以帮助我了解如何进行此转换。我希望我清楚!

安加德

【问题讨论】:

    标签: java string file properties hex


    【解决方案1】:

    如果使用 \uxxxx 代码,则您使用的是 UNICODE 转义序列。 \u0090 最终不会被解释为字符串 "90",它最终会作为一个字符,对应于 UTF-16 编码中的代码单元 0090。

    您的第一种方法应该有效。我建议您尝试System.out.println(prop.getProperty("key")); 或其他形式的输出,并检查是否有前导或尾随空格、您没想到的字符或null。后者意味着找不到“key”的属性。

    【讨论】:

    • 嗨,G_H,感谢您的精彩提示。问题确实是属性文件中的额外空格返回错误的字符串因此,转换器给出了这个错误。感谢您的及时回复。
    • @tranceporter 如果这解决了您的问题,请考虑接受;)
    【解决方案2】:

    似乎我对字节有一些问题,因为字节是有符号的,但是当您从字符串转换时,大于 127 的值会导致问题,因为它们太大了。

    我想我最终一次解析一个十六进制对并将它们转换为整数并将它们存储为字节。

    此外,根据您的操作,您可能会将它们保留为整数,因为字节在进行计算之前会在内部转换为整数,因此整数会更快。

    【讨论】:

    • 是的,如果它们以 unicode 的形式进入,它们在字节之前是字符,我认为这就是你的问题所在。
    猜你喜欢
    • 2015-01-26
    • 2010-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多