黑马程序员技术交流社区

标题: [提问]有关无符号int的问题 [打印本页]

作者: cat73    时间: 2014-7-1 10:19
标题: [提问]有关无符号int的问题
本帖最后由 cat73 于 2014-7-23 23:17 编辑

今天写一个东西的时候遇到一个问题,我需要从一段byte[]中取出四个字节转为整数
于是就有了如下代码
  1.     public int byte4ToInt(byte[] bytes, int off) {  
  2.         int b0 = bytes[off] & 0xFF;  
  3.         int b1 = bytes[off + 1] & 0xFF;  
  4.         int b2 = bytes[off + 2] & 0xFF;  
  5.         int b3 = bytes[off + 3] & 0xFF;

  6.         return (b0 << 24) | (b1 << 16) | (b2 << 8) | b3);  
  7.     }
复制代码
但是这段代码有一个很明显的问题,转换数字时会出现负数,而我要转换的数字是4123366225类似这么大的数字
我想到了一个办法,利用long来存储这种较大的数据
不过经过多次尝试,依旧是输出负数


不知有什么办法可以把这种数据成功的转换为无符号的数字显示出来呢(可以得到String就可以)

以下是我最后几次
尝试的代码


  1. long l = ((long)((b0 << 24) | (b1 << 16) | (b2 << 8) | b3)) & 0xFFFFFFFF;
复制代码


  1.                 long a  = (246 << 24) | (96 << 16) | (52 << 8) | 175;
  2.                 a = a & 0x7FFFFFFF;
  3.                 a = a | 0x80000000;
  4.                 System.out.println(a);
复制代码


================更新================
非常感谢大家对本问题的关注,问题已经解决,下面是解决方案
  1.     public long byte4ToInt(byte[] bytes, int off) {  
  2.         int b0 = bytes[off] & 0xFF;  
  3.         int b1 = bytes[off + 1] & 0xFF;  
  4.         int b2 = bytes[off + 2] & 0xFF;  
  5.         int b3 = bytes[off + 3] & 0xFF;
  6.         long l = ((b3 << 24) | (b2 << 16) | (b1 << 8) | b0) & 0xFFFFFFFFL;

  7.         return l;  
  8.     }
复制代码








欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2