Java字符串转十六进制报错:String.format触发IllegalFormatConversionException
解决
String.format("%016x", "123456")的类型转换异常问题 这个问题我太熟了!你碰到的IllegalFormatConversionException本质是类型不匹配——%x这个格式说明符是专门用来格式化整数类型(比如int、long)的,但你传进去的是一个String类型的"123456",JVM自然会报错告诉你:“我要的是整数,你给我字符串干嘛?”,也就是异常信息里的x != java.lang.String这句话的核心意思。
正确的解决步骤
要把字符串形式的数字转成十六进制,得先把字符串解析成整数,再用String.format格式化:
- 基础版本(适用于数字在int范围内)
String input = "123456"; // 先把字符串转成int类型 int number = Integer.parseInt(input); // 再用%016x格式化,016表示补零到16位 String hexResult = String.format("%016x", number); System.out.println(hexResult); // 输出结果:000000000001e240
- 兼容大数版本(如果数字可能超出int范围)
如果你的输入数字可能比Integer.MAX_VALUE(2^31-1)大,就用Long.parseLong转成long类型:
String input = "123456"; long number = Long.parseLong(input); String hexResult = String.format("%016x", number); System.out.println(hexResult);
- 增加异常处理(避免无效输入崩溃)
如果输入的字符串可能不是有效数字(比如包含字母),记得加异常捕获:
String input = "123456"; try { int number = Integer.parseInt(input); String hexResult = String.format("%016x", number); System.out.println(hexResult); } catch (NumberFormatException e) { System.err.println("输入的字符串不是有效的整数,请检查!"); e.printStackTrace(); }
内容的提问来源于stack exchange,提问作者Nunyet Calçada




