将基本类型进行编码
来源:互联网 发布: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); }}