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

Convert hex to INT 32 and STRING Little Endian

第一个问题:

十六进制: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));
  }

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

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");
ЧЕРНЫШЕВА С. Н.