首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java相关 >

8个字节的16进制数 怎么转换成10进制数

2012-11-07 
8个字节的16进制数 如何转换成10进制数各路大神:下面的方法是把10进制数转换成8个字节的16进制数:如把 139

8个字节的16进制数 如何转换成10进制数
各路大神:
 下面的方法是把10进制数转换成8个字节的16进制数:
 如把 13912345678L(long型10进制数)转换成字节数组byte[] b = new byte[8],
 b = {78, -116, 61, 61, 3, 0, 0, 0}
 方法代码:
 long l = 13912345678L;
 byte [] b = new byte[8]; 
  b[0] = (byte) (l & 0x000000000000FFL); 
  b[1] = (byte) ((l & 0x0000000000FF00L) >> 8); 
  b[2] = (byte) ((l & 0x0000000000FF0000L) >> 16); 
  b[3] = (byte) ((l & 0x00000000FF000000L) >> 24); 
  b[4] = (byte) ((l & 0x000000FF00000000L) >> 32); 
  b[5] = (byte) ((l & 0x0000FF0000000000L) >> 40); 
  b[6] = (byte) ((l & 0x00FF000000000000L) >> 48); 
  b[7] = (byte) ((l & 0xFF00000000000000L) >> 56);
问题来了,如何把其返回去,即由字节数组b = {78, -116, 61, 61, 3, 0, 0, 0} 转换成l=13912345678L(十进制数)? 求高手指教呀!!!!


[解决办法]
我写了一个,参考一下:

Java code
import java.util.Arrays;public class ChangeBytesToNumber{    public static void main(String[] args)    {        long l = -13912345678L;        byte[] b = numberToBytes(l);            //数转成数组。        long number=bytesToNumber(b);            //还原成数。        System.out.println("l is  "+l);        System.out.println("number is  "+number);    }    public static long bytesToNumber(byte[] b)    {        byte[] b1=Arrays.copyOfRange(b,0,8);        //复制数值部分。        StringBuffer sb=new StringBuffer();        String tem=null;        int length=b1.length;        for(int i=0;i<length;i++)            //组成16进制字符串。        {            tem=(b1[length-i-1]>=0)?Integer.toHexString(b1[length-i-1]):                Integer.toHexString(b1[length-i-1]).substring(6);            sb.append(tem);        }        long result=Long.parseLong(sb.toString(),16);    //转成long型值。        result=(b[8]==0)?result:0-result;        //处理符号。                    return result;    }    public static byte[] numberToBytes(long l)    {        byte [] b = new byte[9];                     b[8]=(l>0)?(byte)0:(byte)1;        //l>0,b[8]=0;l<0,b[8]=1。        l=(l>0)?l:0-l;                //处理l的绝对值。        b[0] = (byte) (l & 0x000000000000FFL);          b[1] = (byte) ((l & 0x0000000000FF00L) >> 8);          b[2] = (byte) ((l & 0x0000000000FF0000L) >> 16);          b[3] = (byte) ((l & 0x00000000FF000000L) >> 24);          b[4] = (byte) ((l & 0x000000FF00000000L) >> 32);          b[5] = (byte) ((l & 0x0000FF0000000000L) >> 40);          b[6] = (byte) ((l & 0x00FF000000000000L) >> 48);          b[7] = (byte) ((l & 0xFF00000000000000L) >> 56);        return b;    }}
[解决办法]
Java code
/** * 各基础类型与byte之间的转换 * @author shanl * */public class Utility {        /**     * 将short转成byte[2]     * @param a     * @return     */    public static byte[] short2Byte(short a){        byte[] b = new byte[2];                b[0] = (byte) (a >> 8);        b[1] = (byte) (a);                return b;    }        /**     * 将short转成byte[2]     * @param a     * @param b     * @param offset b中的偏移量     */    public static void short2Byte(short a, byte[] b, int offset){        b[offset] = (byte) (a >> 8);        b[offset+1] = (byte) (a);    }        /**     * 将byte[2]转换成short     * @param b     * @return     */    public static short byte2Short(byte[] b){        return (short) (((b[0] & 0xff) << 8) | (b[1] & 0xff));    }        /**     * 将byte[2]转换成short     * @param b     * @param offset     * @return      */    public static short byte2Short(byte[] b, int offset){        return (short) (((b[offset] & 0xff) << 8) | (b[offset+1] & 0xff));    }    /**     * long转byte[8]     *      * @param a     * @param b     * @param offset     *            b的偏移量     */    public static void long2Byte(long a, byte[] b, int offset) {                b[offset + 0] = (byte) (a >> 56);        b[offset + 1] = (byte) (a >> 48);        b[offset + 2] = (byte) (a >> 40);        b[offset + 3] = (byte) (a >> 32);        b[offset + 4] = (byte) (a >> 24);        b[offset + 5] = (byte) (a >> 16);        b[offset + 6] = (byte) (a >> 8);        b[offset + 7] = (byte) (a);    }    /**     * byte[8]转long     *      * @param b     * @param offset     *            b的偏移量     * @return     */    public static long byte2Long(byte[] b, int offset) {         return ((((long) b[offset + 0] & 0xff) << 56)         | (((long) b[offset + 1] & 0xff) << 48)         | (((long) b[offset + 2] & 0xff) << 40)         | (((long) b[offset + 3] & 0xff) << 32)                  | (((long) b[offset + 4] & 0xff) << 24)         | (((long) b[offset + 5] & 0xff) << 16)         | (((long) b[offset + 6] & 0xff) << 8)         | (((long) b[offset + 7] & 0xff) << 0));    }    /**     * byte[8]转long     *      * @param b     * @return     */    public static long byte2Long(byte[] b) {         return         ((b[0]&0xff)<<56)|         ((b[1]&0xff)<<48)|         ((b[2]&0xff)<<40)|         ((b[3]&0xff)<<32)|                 ((b[4]&0xff)<<24)|         ((b[5]&0xff)<<16)|         ((b[6]&0xff)<<8)|         (b[7]&0xff);    }    /**     * long转byte[8]     *      * @param a     * @return     */    public static byte[] long2Byte(long a) {        byte[] b = new byte[4 * 2];        b[0] = (byte) (a >> 56);        b[1] = (byte) (a >> 48);        b[2] = (byte) (a >> 40);        b[3] = (byte) (a >> 32);                b[4] = (byte) (a >> 24);        b[5] = (byte) (a >> 16);        b[6] = (byte) (a >> 8);        b[7] = (byte) (a >> 0);        return b;    }    /**     * byte数组转int     *      * @param b     * @return     */    public static int byte2Int(byte[] b) {        return ((b[0] & 0xff) << 24) | ((b[1] & 0xff) << 16)                | ((b[2] & 0xff) << 8) | (b[3] & 0xff);    }    /**     * byte数组转int     *      * @param b     * @param offset     * @return     */    public static int byte2Int(byte[] b, int offset) {        return ((b[offset++] & 0xff) << 24) | ((b[offset++] & 0xff) << 16)                | ((b[offset++] & 0xff) << 8) | (b[offset++] & 0xff);    }    /**     * int转byte数组     *      * @param a     * @return     */    public static byte[] int2Byte(int a) {        byte[] b = new byte[4];        b[0] = (byte) (a >> 24);        b[1] = (byte) (a >> 16);        b[2] = (byte) (a >> 8);        b[3] = (byte) (a);        return b;    }    /**     * int转byte数组     *      * @param a     * @param b     * @param offset     * @return     */    public static void int2Byte(int a, byte[] b, int offset) {                b[offset++] = (byte) (a >> 24);        b[offset++] = (byte) (a >> 16);        b[offset++] = (byte) (a >> 8);        b[offset++] = (byte) (a);    }} 

热点排行