为了账号安全,请及时绑定邮箱和手机立即绑定

long b=99999999999999999L转换成byte[]后再转回来对不上

public class Binary {

    //将byte[]转换成long
    public long byte2Long(byte[] arr){
        long num = 0;
        for (int i= 0; i < 8; i++) {
            num += (long)((arr[i]&0xff)<<i*8) ;
        }
        return num;
    }
     //将long转换成byte[]
    public byte[] long2Byte(long b){
        byte[] bytes=new byte[8];
        for (int i = 0; i < 8; i++) {
            bytes[i]=(byte)((b>>i*8)&0xff);
        }
        return bytes;
    }

    public static void main(String[] args) {
        Binary test=new Binary();
        long b= 99999999999999999L;
        byte[] bytes=test.long2Byte(b) ;
        System.out.println(Arrays.toString(bytes));
        System.out.println(test.byte2Long(bytes));
    }
}

转回来变成了1592608119

正在回答

2 回答

long类型的数不是有值域范围嘛,你这个明显超出范围了啊

0 回复 有任何疑惑可以回复我~

过了一段时间回过头来看,在第7行与第8行之间插入 System.out.println(num);

发现打印出来的数据分别是:

255

65535

9043967

1569325055

1569325175

1569342839

1575830903

1592608119

然后我把第7行改成 num+=(long)(arr[i]&0xff)<<i*8;

结果就对了.

经分析byte是4字节的,最多只能左移4位,超过4位就会造成数据丢失,要先转换成long才能左移8位;

1 回复 有任何疑惑可以回复我~
#1

奔雷手文泰来 提问者

错了,byte是1个字节的,arr[i]&0xff是默认的int型,4个字节?
2019-03-17 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
二进制基础
  • 参与学习       99898    人
  • 解答问题       210    个

二进制是计算机唯一能识别的语言,是学习计算机技术必备的知识

进入课程

long b=99999999999999999L转换成byte[]后再转回来对不上

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信