你的位置:首页 > Java教程

[Java教程][转载] java中byte数组与int,long,short间的转换


文章转载自http://blog.csdn.net/leetcworks/article/details/7390731

 1 package com.util; 2  3 /** 4  *  5  * <ul> 6  * <li>文件名称: com.born.util.ByteUtil.java</li> 7  * <li>文件描述: byte转换工具</li> 8  * <li>版权所有: 版权所有(C)2001-2006</li> 9  * <li>公 司: bran</li> 10  * <li>内容摘要:</li> 11  * <li>其他说明:</li> 12  * <li>完成日期:2011-7-18</li> 13  * <li>修改记录0:无</li> 14  * </ul> 15  *  16  * @version 1.0 17  * @author 许力多 18 */ 19 public class ByteUtil { 20   /** 21    * 转换short为byte 22    *  23    * @param b 24    * @param s 25    *      需要转换的short 26    * @param index 27   */ 28   public static void putShort(byte b[], short s, int index) { 29     b[index + 1] = (byte) (s >> 8); 30     b[index + 0] = (byte) (s >> 0); 31   } 32  33   /** 34    * 通过byte数组取到short 35    *  36    * @param b 37    * @param index 38    *      第几位开始取 39    * @return 40   */ 41   public static short getShort(byte[] b, int index) { 42     return (short) (((b[index + 1] << 8) | b[index + 0] & 0xff)); 43   } 44  45   /** 46    * 转换int为byte数组 47    *  48    * @param bb 49    * @param x 50    * @param index 51   */ 52   public static void putInt(byte[] bb, int x, int index) { 53     bb[index + 3] = (byte) (x >> 24); 54     bb[index + 2] = (byte) (x >> 16); 55     bb[index + 1] = (byte) (x >> 8); 56     bb[index + 0] = (byte) (x >> 0); 57   } 58  59   /** 60    * 通过byte数组取到int 61    *  62    * @param bb 63    * @param index 64    *      第几位开始 65    * @return 66   */ 67   public static int getInt(byte[] bb, int index) { 68     return (int) ((((bb[index + 3] & 0xff) << 24) 69         | ((bb[index + 2] & 0xff) << 16) 70         | ((bb[index + 1] & 0xff) << 8) | ((bb[index + 0] & 0xff) << 0))); 71   } 72  73   /** 74    * 转换long型为byte数组 75    *  76    * @param bb 77    * @param x 78    * @param index 79   */ 80   public static void putLong(byte[] bb, long x, int index) { 81     bb[index + 7] = (byte) (x >> 56); 82     bb[index + 6] = (byte) (x >> 48); 83     bb[index + 5] = (byte) (x >> 40); 84     bb[index + 4] = (byte) (x >> 32); 85     bb[index + 3] = (byte) (x >> 24); 86     bb[index + 2] = (byte) (x >> 16); 87     bb[index + 1] = (byte) (x >> 8); 88     bb[index + 0] = (byte) (x >> 0); 89   } 90  91   /** 92    * 通过byte数组取到long 93    *  94    * @param bb 95    * @param index 96    * @return 97   */ 98   public static long getLong(byte[] bb, int index) { 99     return ((((long) bb[index + 7] & 0xff) << 56)100         | (((long) bb[index + 6] & 0xff) << 48)101         | (((long) bb[index + 5] & 0xff) << 40)102         | (((long) bb[index + 4] & 0xff) << 32)103         | (((long) bb[index + 3] & 0xff) << 24)104         | (((long) bb[index + 2] & 0xff) << 16)105         | (((long) bb[index + 1] & 0xff) << 8) | (((long) bb[index + 0] & 0xff) << 0));106   }107 108   /**109    * 字符到字节转换110    * 111    * @param ch112    * @return113   */114   public static void putChar(byte[] bb, char ch, int index) {115     int temp = (int) ch;116     // byte[] b = new byte[2];117     for (int i = 0; i < 2; i ++ ) {118       bb[index + i] = new Integer(temp & 0xff).byteValue(); // 将最高位保存在最低位119       temp = temp >> 8; // 向右移8位120     }121   }122 123   /**124    * 字节到字符转换125    * 126    * @param b127    * @return128   */129   public static char getChar(byte[] b, int index) {130     int s = 0;131     if (b[index + 1] > 0)132       s += b[index + 1];133     else134       s += 256 + b[index + 0];135     s *= 256;136     if (b[index + 0] > 0)137       s += b[index + 1];138     else139       s += 256 + b[index + 0];140     char ch = (char) s;141     return ch;142   }143 144   /**145    * float转换byte146    * 147    * @param bb148    * @param x149    * @param index150   */151   public static void putFloat(byte[] bb, float x, int index) {152     // byte[] b = new byte[4];153     int l = Float.floatToIntBits(x);154     for (int i = 0; i < 4; i++) {155       bb[index + i] = new Integer(l).byteValue();156       l = l >> 8;157     }158   }159 160   /**161    * 通过byte数组取得float162    * 163    * @param bb164    * @param index165    * @return166   */167   public static float getFloat(byte[] b, int index) {168     int l;169     l = b[index + 0];170     l &= 0xff;171     l |= ((long) b[index + 1] << 8);172     l &= 0xffff;173     l |= ((long) b[index + 2] << 16);174     l &= 0xffffff;175     l |= ((long) b[index + 3] << 24);176     return Float.intBitsToFloat(l);177   }178 179   /**180    * double转换byte181    * 182    * @param bb183    * @param x184    * @param index185   */186   public static void putDouble(byte[] bb, double x, int index) {187     // byte[] b = new byte[8];188     long l = Double.doubleToLongBits(x);189     for (int i = 0; i < 4; i++) {190       bb[index + i] = new Long(l).byteValue();191       l = l >> 8;192     }193   }194 195   /**196    * 通过byte数组取得float197    * 198    * @param bb199    * @param index200    * @return201   */202   public static double getDouble(byte[] b, int index) {203     long l;204     l = b[0];205     l &= 0xff;206     l |= ((long) b[1] << 8);207     l &= 0xffff;208     l |= ((long) b[2] << 16);209     l &= 0xffffff;210     l |= ((long) b[3] << 24);211     l &= 0xffffffffl;212     l |= ((long) b[4] << 32);213     l &= 0xffffffffffl;214     l |= ((long) b[5] << 40);215     l &= 0xffffffffffffl;216     l |= ((long) b[6] << 48);217     l &= 0xffffffffffffffl;218     l |= ((long) b[7] << 56);219     return Double.longBitsToDouble(l);220   }221 }

 1 public class DataTypeChangeHelper { 2   /** 3    * 将一个单字节的byte转换成32位的int 4    *  5    * @param b 6    *      byte 7    * @return convert result 8   */ 9   public static int unsignedByteToInt(byte b) { 10     return (int) b & 0xFF; 11   } 12  13   /** 14    * 将一个单字节的Byte转换成十六进制的数 15    *  16    * @param b 17    *      byte 18    * @return convert result 19   */ 20   public static String byteToHex(byte b) { 21     int i = b & 0xFF; 22     return Integer.toHexString(i); 23   } 24  25   /** 26    * 将一个4byte的数组转换成32位的int 27    *  28    * @param buf 29    *      bytes buffer 30    * @param byte[]中开始转换的位置 31    * @return convert result 32   */ 33   public static long unsigned4BytesToInt(byte[] buf, int pos) { 34     int firstByte = 0; 35     int secondByte = 0; 36     int thirdByte = 0; 37     int fourthByte = 0; 38     int index = pos; 39     firstByte = (0x000000FF & ((int) buf[index])); 40     secondByte = (0x000000FF & ((int) buf[index + 1])); 41     thirdByte = (0x000000FF & ((int) buf[index + 2])); 42     fourthByte = (0x000000FF & ((int) buf[index + 3])); 43     index = index + 4; 44     return ((long) (firstByte << 24 | secondByte << 16 | thirdByte << 8 | fourthByte)) & 0xFFFFFFFFL; 45   } 46  47   /** 48    * 将16位的short转换成byte数组 49    *  50    * @param s 51    *      short 52    * @return byte[] 长度为2 53    * */ 54   public static byte[] shortToByteArray(short s) { 55     byte[] targets = new byte[2]; 56     for (int i = 0; i < 2; i++) { 57       int offset = (targets.length - 1 - i) * 8; 58       targets[i] = (byte) ((s >>> offset) & 0xff); 59     } 60     return targets; 61   } 62  63   /** 64    * 将32位整数转换成长度为4的byte数组 65    *  66    * @param s 67    *      int 68    * @return byte[] 69    * */ 70   public static byte[] intToByteArray(int s) { 71     byte[] targets = new byte[2]; 72     for (int i = 0; i < 4; i++) { 73       int offset = (targets.length - 1 - i) * 8; 74       targets[i] = (byte) ((s >>> offset) & 0xff); 75     } 76     return targets; 77   } 78  79   /** 80    * long to byte[] 81    *  82    * @param s 83    *      long 84    * @return byte[] 85    * */ 86   public static byte[] longToByteArray(long s) { 87     byte[] targets = new byte[2]; 88     for (int i = 0; i < 8; i++) { 89       int offset = (targets.length - 1 - i) * 8; 90       targets[i] = (byte) ((s >>> offset) & 0xff); 91     } 92     return targets; 93   } 94  95   /**32位int转byte[]*/ 96   public static byte[] int2byte(int res) { 97     byte[] targets = new byte[4]; 98     targets[0] = (byte) (res & 0xff);// 最低位 99     targets[1] = (byte) ((res >> 8) & 0xff);// 次低位100     targets[2] = (byte) ((res >> 16) & 0xff);// 次高位101     targets[3] = (byte) (res >>> 24);// 最高位,无符号右移。102     return targets;103   }104 105   /**106    * 将长度为2的byte数组转换为16位int107    * 108    * @param res109    *      byte[]110    * @return int111    * */112   public static int byte2int(byte[] res) {113     // res = InversionByte(res);114     // 一个byte数据左移24位变成0x??000000,再右移8位变成0x00??0000115     int targets = (res[0] & 0xff) | ((res[1] << 8) & 0xff00); // | 表示安位或116     return targets;117   }118 }