将基本类型进行编码

来源:互联网 发布:js获得radio的值 编辑:程序博客网 时间:2024/05/22 14:54
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);    }}


原创粉丝点击