将十六进制转换为INT 32并使用STRING Little Endian
来源:爱站网时间:2021-09-16编辑:网友分享
[第一个问题:十六进制:F1620000将十六进制转换为INT 32后,我希望达到253229,但我得到-245235712。我已经尝试过以下方法:Integer.parseUnsignedInt(value,16)); (int)Long.parseLong(value,16));新...
问题描述
第一个问题:
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
解决方法:
您的所有尝试都足以解析无符号解释中的十六进制字符串,但没有考虑“ 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");
ЧЕРНЫШЕВА С. Н.
上一篇:如何访问对象的字段
下一篇:使用休眠回调的优势?