`
jacking
  • 浏览: 3513 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

java读c/c++无符号整形问题解决

阅读更多

1.最近项目中用java读c++写的二进制文件,二进制文件用2个字节无符号整形存储,java用
  DataInputStream dis = new DataInputStream(ins);//ins为文件流

  dis.readUnsignedShort();//java读无符号整形

  读出来的数据和c++读出来差别比较大,跳一个字节后读出来的20000个数据有90%左右一致的。。。。

2.后来用UltraEdit直接看二进制数据,正常高低位顺序读出来和java是一致的,把高低位反调后和c++是一致的。

   c++存储无符号整形是高低位反调,java读是正常高低位读数据!

3.最后解决:java正常读出来再高低位反调。

   /**
  * 2个字节无符号整形高低位反调
  * @param num
  * @return
  */
 public static int changeHightDown(int num)
 {
   if(num>65535||num<0)
   {
    return num;
   }
  else if(num<16)
   {
    String temp = Integer.toHexString(num);
    String tempnew = "0"+temp+"00";
    return Integer.parseInt(tempnew, 16);
   }
  else if(num<256&&num>=16)
  {
    String temp = Integer.toHexString(num);
    String tempnew = temp+"00";
    return Integer.parseInt(tempnew, 16);
   
  }
  else if(num<4096&&num>=256)
  {
    String temp = Integer.toHexString(num);
    String tempnew = temp.substring(1, 3)+"0"+temp.substring(0, 1);
    return Integer.parseInt(tempnew, 16);
  }
  else
  {
   
    String temp = Integer.toHexString(num);
    String tempnew = temp.substring(2, 4)+temp.substring(0, 2);
    return Integer.parseInt(tempnew, 16);
   
  }
 
 }

1
0
分享到:
评论
1 楼 flying_all 2010-08-28  
太感谢了,找了好久 。我一直以为是位数问题呢

相关推荐

Global site tag (gtag.js) - Google Analytics