A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© cat73 黑马帝   /  2014-7-1 10:19  /  478 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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.     }
复制代码



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马