You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

图片隐写时触发java.lang.NumberFormatException错误求助

解决图片隐写中的NumberFormatException问题

嘿,我看你在实现图片隐写(把一张图藏进另一张同类型图里)的时候碰到了这个恼人的异常:

Exception in thread "main" java.lang.NumberFormatException: For input string: "010010101101111111" at java.lang.NumberFormatException.forInputString(Unknown Source) at java.lang.Integer.parseInt(Unknown Source) at java.lang.Integer.parseInt(Unknown Source) at Image.main(Image.java:160)

问题根源分析

这个异常的核心原因是你在Image.java第160行调用Integer.parseInt()时,传入的二进制字符串"010010101101111111"无法被正确解析为int类型,大概率是以下情况:

  • 没指定解析进制,默认按十进制处理:如果你写的是Integer.parseInt("010010101101111111"),Java会把这个字符串当作十进制数解析,但这个数的数值是100101011011111111,远超过了int类型的最大值2147483647(也就是2^31-1),直接触发溢出异常。
  • 要是后续处理更长的二进制串,哪怕指定了进制,int的31位上限也会不够用,同样会抛出异常。

针对性解决方案

根据你的使用场景,给你两个可行的解决办法:

  1. 明确指定二进制进制解析:如果你要处理的是二进制字符串,一定要在parseInt里加上第二个参数2,告诉Java按二进制解析:
    // 正确的二进制转int方式
    int num = Integer.parseInt("010010101101111111", 2);
    
    这个例子里的二进制串转成十进制是145535,完全在int的范围内,不会报错。
  2. 用更大范围的类型处理长二进制串:如果你的隐写逻辑会生成超过31位的二进制字符串(比如处理多像素的连续数据),那int就不够用了,可以换成Long.parseLong()或者BigInteger:
    // 处理更长的二进制串,用long类型
    long longNum = Long.parseLong(longBinaryStr, 2);
    // 或者用BigInteger处理任意长度的二进制串
    BigInteger bigNum = new BigInteger(anyLengthBinaryStr, 2);
    

额外小提示

在图片隐写场景中,通常我们只会修改像素的最低1-2位来隐藏数据,这样不会明显改变原图的视觉效果。处理数据的时候建议按像素的二进制位分段处理,避免一次性生成过长的二进制字符串,减少溢出风险。

内容的提问来源于stack exchange,提问作者user123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:10:17