二进制转十进制诡异问题求救~

stromboy007 2017-03-06 04:03:29
因为调用C++DLL的方法中有个参数为 unsigned int nMask 功能掩码(32位)。每个bit表示一项功能,0值表示未开通,1值表示已开通(已授权 )

在使用下面方法处理时,只要当第一位为“1”就提示异常了,第一位如果是“0”则正常



String A=binaryString2hexString("00000100000000000010000000001000");---04002008
String B=binaryString2hexString("10000100000000000010000000001000");----84002008

int nMask =Integer.parseInt(A,16);---正常; 67117064
int nMask2 =Integer.parseInt(B,16);---提示异常,错误信息如下
--严重: Servlet.service() for servlet OemToolServlet threw exception
---java.lang.NumberFormatException: For input string: "84002008"
-- at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
-- at java.lang.Integer.parseInt(Integer.java:461)
-- at oem.tool.OemToolServlet.doGet(OemToolServlet.java:37)
-- at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
-- at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)

public static String binaryString2hexString(String bString)
{
if (bString == null || bString.equals("") || bString.length() % 8 != 0)
return null;
StringBuffer tmp = new StringBuffer();
int iTmp = 0;
for (int i = 0; i < bString.length(); i += 4)
{
iTmp = 0;
for (int j = 0; j < 4; j++)
{
iTmp += Integer.parseInt(bString.substring(i + j, i + j + 1)) << (4 - j - 1);
}
tmp.append(Integer.toHexString(iTmp));
}
return tmp.toString();
}
...全文
120 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
robot0131 2017-03-06
  • 打赏
  • 举报
回复
84002008这个是16进制,换算成10进制是2214600712, int范围是-2147483647~2147483647
robot0131 2017-03-06
  • 打赏
  • 举报
回复
...是你数据超过int的最大值了。。。

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧