首页 > 解决方案 > 如何将整数转换为十六进制有符号 2 的补码:

问题描述

我确信非常基本的东西,但位不是我的强项。

因此,对于一些内部计算,我试图将给定的输入(约束是它肯定是一个整数字符串)转换为它的十六进制等效项,让我难过的是如何获得十六进制签名 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

任何预定义的库都非常受欢迎或任何其他有用的指针!

标签: javatype-conversionhextwos-complement

解决方案


因此,要将十六进制数字填充到 4 位或 8 位,请执行以下操作:

int intVal = Integer.parseInt(arg);
if (intVal >= 0 && intVal <= 0xffff) {
     hexVal = String.format("%04x", intVal);
} else {
     hexVal = String.format("%08x", intVal);
}

有关格式字符串的工作原理,请参阅Java 文档


推荐阅读