android的byte转int

Android 下 int to byte  和byte to int

 

 

int to byte

Android系统int 为4个字节,byte为一个字节,inttobyte 只需将int每个字节截开就可以;

 

    int k4=0x1a2b3f;

    byte [] bita=newbyte[4];

    bita[0]=(byte) ((k4 & 0xff000000)>>24);

    bita[1]=(byte) ((k4 & 0x00ff0000)>>16);

    bita[2]=(byte) ((k4 & 0x0000ff00)>>8);

    bita[3]=(byte) (k4 & 0xff);

 

bita的结果是0 1a  2b 3f  

 

反过来的byte toint直接转换是不行的,应为java中没有unsigned 这种定义,即最高位是符号位。当byte强转为int时符号位就可能出错,应为小于0x80的可以直接转,大于0x80的是错误的。所以   

byte [] bit=newbyte[4];

       bit[0]=0x01;

       bit[1]=0x73;

       bit[2]=(byte)0x83;

       bit[3]=(byte)0xa3;

int k4=((int)(bit[0])<< 24) + (((int)bit[1]) << 16) + (((int)bit[2]) << 8) +bit[3];是错误的。

结果是k4= 24281763

而 0x017383a3 的十进制是24347555

 

 

byte   0x83 强转为int 后是 -125。 而不是131

 

0x83 二进制为 1000  0011  强转为int是最高为被Android认为是符号位

就转成了 1111 1111  1111 1111  1111 1111 1000 0011 ,经过反码,补码变化(取反加一) 内存中变为  1000 0000  0000 0000  00000 0000  0111 1101 ,最高位是符号位,

0111 1101 是125,0x83 就有131 变成了-125;

 

所以k4 = 1*2^24  +  115*2^26 +(-125)*2^8 +(-93 )= 24281763

 

Eclipse 中的提示

(大于等于0x80的提示错误)

 

 

 

 

 

 

正确的转换应该是

 

byte [] b=newbyte[4];

       b[0]=0x01;

       b[1]=0x73;

       b[2]=(byte)0x83;

       b[3]=(byte)0xa3;

 

 

          int [] b1 =new int [4];

          for(int i=0;i<4;i++)

          {

                 if(b[i]<0)

                        b1[i] = (int)(b[i] &0x7f)  + 128;

                 else

                        b1[i]= (int) b[i];

          }

          return ((b1[0]) << 24) + ((b1[1])<< 16) + ((b1[2]) << 8) + b1[3];

 

当最高位是一时,被Android认为是负数,先b[i] &0x7f将符号位去除,强转为int ,再加上128;

例如 0x83二进制为 1000  0011经过  &0x7f 后 ,变为 0000 0011 ,强转为int 变成    0000 0000  0000 0000  00000 0000  0000 0011 ,再加上128(1000  000)将去除的第8位补上


http://download.csdn.net/detail/xiang3420/7975213

资源上加红的那一行写错了,当时没改完

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值