将十六进制转换为INT 32并使用STRING Little Endian

问题描述 投票:1回答:1

第一个问题:

Hex:F1620000

将十六进制转换为INT 32之后,我期望253229,但是我得到-245235712。我已经尝试过这些方法:

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

我如何获得正确的价值?

第二个问题:

Hex: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));
  }
java json hex converters
1个回答
2
投票

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

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");
ЧЕРНЫШЕВА С. Н.
© www.soinside.com 2019 - 2024. All rights reserved.