【发布时间】:2021-01-23 04:07:07
【问题描述】:
我确信非常基本的东西,但位不是我的强项。
所以对于一些内部计算,我试图将给定的输入(约束是它肯定是一个整数字符串)转换成它的十六进制等价物,让我难过的是如何得到 十六进制符号 2 的补码:
我的菜鸟代码:
private String toHex(String arg, boolean isAllInt) {
String hexVal = null;
log.info("arg {}, isAllInt {}", arg, isAllInt);
if (isAllInt) {
int intVal = Integer.parseInt(arg);
hexVal = Integer.toHexString(intVal);
// some magic to convert this hexVal to its 2's compliment
} else {
hexVal = String.format("%040x", new BigInteger(1, arg.getBytes(StandardCharsets.UTF_8)));
}
log.info("str {} hex {}", arg, hexVal);
return hexVal;
}
输入:00001
输出:1
预期输出:0001
输入:00216
输出:D8
预期输出:00D8
00216
输入:1192633166
输出:4716234E
预期输出:4716234E
欢迎任何预定义的库或任何其他有用的指针!
【问题讨论】:
-
如果你想要一个有符号的 2s 补码值,你必须指定一个以位为单位的字长。您希望为此使用什么?可能是 4 的最小倍数?
-
感谢您的回复,是的,鉴于我的用例,预计最少 4 个。
-
您想用前导零最多 16 位填充数字到 4 个十六进制数字和最多 32 位数字到 8 个十六进制数字吗?例如0xa12345 应该是 0x000a123456 还是 0xa123456?
-
@nos 是的先生...如果有帮助,我的输入总是上限为最多 10 位数字,例如:1192633166 / 1602135736
-
知道了,下面有你的答案,干杯。
标签: java type-conversion hex twos-complement