java - 如何将整数转换为十六进制有符号 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
任何预定义的库都非常受欢迎或任何其他有用的指针!
解决方案
因此,要将十六进制数字填充到 4 位或 8 位,请执行以下操作:
int intVal = Integer.parseInt(arg);
if (intVal >= 0 && intVal <= 0xffff) {
hexVal = String.format("%04x", intVal);
} else {
hexVal = String.format("%08x", intVal);
}
有关格式字符串的工作原理,请参阅Java 文档。
推荐阅读
- sql-server - MSSQL C# query Only add row if value is unique
- asp.net-core-2.0 - .net 核心托管为 Windows 服务 - 如何使用配置文件?
- unity3d - 在 vuforia 模型目标中使用 unity 如何调整模型的尺寸?
- c# - 如何在c#中获取一段Json?
- c++ - freeimage 写入像素
- unix - Unix:删除文件中的文本匹配模式
- macos - 用于 Mac 的 f3probe?
- google-cloud-platform - Google 部署管理器存储的运行时配置变量显示已损坏
- centos - Plesk 从服务计划中删除托管类型“网站托管”
- java - 什么是通用语言环境数据存储库 (CLDR) - JDK 9