将十六进制转换为INT 32和STRING Little Endian

时间:2020-02-21 10:56:03

标签: java json hex converters

第一个问题:

十六进制:F1620000

将十六进制转换为INT 32后,我希望达到253229,但得到-245235712。 我已经尝试过以下方法:

Integer.parseUnsignedInt(value, 16));
(int)Long.parseLong(value, 16));
new BigInteger(value, 16).intValue());

我如何获得正确的价值?

第二个问题:

十六进制:9785908D9B9885828020912E208D2E

隐藏十六进制到STRING后,我可以得到以下值:

\u0097\u0085\u0090\u008d\u009b\u0098\u0085\u0082\u0080 \u0091. \u008d.

如何在json中正确显示此值? (使用JSONObject)。

StringBuilder result = new StringBuilder();
  for (int i = 0; i < value.length(); i += 2) {
    String str = value.substring(i, i + 2);
      result.append((char)Integer.parseInt(str, 16));
  }

1 个答案:

答案 0 :(得分:2)

您的所有尝试都足以解析无符号解释中的十六进制字符串,但没有考虑“小尾数”表示。您必须手动反转字节码:

String value = "F1620000";
int i = Integer.reverseBytes(Integer.parseUnsignedInt(value, 16));
System.out.println(i);
25329

对于第二项任务,缺少的信息是如何解释字节以获取字符内容。经过一番搜索,Codepage 866似乎是最合理的编码:

String value = "9785908D9B9885828020912E208D2E";
byte[] bytes = new BigInteger(value, 16).toByteArray();
String result = new String(bytes, bytes[0]==0? 1: 0, value.length()/2, "CP866");
ЧЕРНЫШЕВА С. Н.
相关问题