将基本类型进行编码

package first;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Arrays;

public class GetLongFromStream {
    public static void main(String args[]) throws IOException{
	byte[] buf = new byte[8];
	System.out.println(Long.MAX_VALUE);
	encoding(Long.MAX_VALUE,buf,0,8);
	System.out.println(decodings(buf, 0, 8));
	//set();
	
    }
   
    /**
     * 将long 转成 字数组,buf存放位数从高倒低
     * 思路:buf[0]放最高位,那么就想法得到最高位,那么就c向移7位,就剩下最高的那个字节,
     * 那么问题是怎么取第二高位,其实很简单,我们将c向右移6位,剩下最高的两个字节,我们再 (byte)取低位的那个字节,
     * 依此类推,就能得到所有的字节
     * @param c   	
     * @param buf	存放结果
     * @param off	开始位置
     * @param size	占用的字节数
     */
    public static void encoding(long c,byte[]buf,int off,int size) {
	for(int i=0;i<size;i++) {
	    buf[off++] = (byte)(c>>((size-i-1)*8));
	}
    }
    public static long decoding(byte[]buf,int off,int len) {
	long ret = 0;
	for(int i=0;i<len;i++) {
	    ret = (ret<<8)|((long)buf[off+i]&0xff);
	}
	return ret;
    }
    /**
     * 将 byte[] 数组存放的二进制表示成相应的值
     * 思路:buf[0]为最高位,那么将其左移7位,buf[1]左移6位,两它们合成一个数的方法是前者与
     * 后者 相或(|),上面的那个方法更好点
     * @param buf
     * @param off	开始位置
     * @param size	结果要占用的字节
     * @return
     */
    public static long decodings(byte[]buf,int off,int size) {
	long ret = 0;
	for(int i=size-1;i>=0;i--) {
	    ret = ret|((long)buf[off++]&0xff)<<(i*8);
	}
	return ret;
    }
    /**
     * 运算顺序
     * 单元
     * 算术移位
     * 关系
     * 逻辑
     * 条件
     * 赋值
     */
    public static void set() {
	System.out.println(1&0xff<<7);
	System.out.println(2-1<<7);
	System.out.println(2>1);
	System.out.println((byte)1+127);
	
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值