byte[]数组和int之间的转换

unsigned char head[2];            //标识头    0x64,0xa4
unsigned char cmd;                //命令号,  0x03
unsigned char cmd_id;             //命令类型,0x00
unsigned char serial[6];          //设备序列号,MAC 地址
unsigned char cmd_len[2];         //命令长度,低位在前
unsigned char cmd_no[2];          //命令帧号,低位在前
unsigned char dev_name[48];
unsigned char tick[4];
unsigned char dev_mac[8];
unsigned char dev_ep[4];            //低字节,高字节为0
unsigned char dev_value[4];      //报警值:


开发和硬件通信的程序,关于变量类型转换,比较麻烦. 类型相互转换,一一对应
java

因为机顶盒的程序开发年代久远...数值一下子用2个byte表示,一下子用4个byte表示.数组

好在存储方式固定基本都是(低位在前,高位在后)的方式,Java后台统一用int来接收了.spa

网上逛了下,有写好的现成的方法,偷了个懒就直接拿来用了..net

贴个代码:code

/**
 * 将int数值转换为占四个字节的byte数组,本方法适用于(低位在前,高位在后)的顺序。 和bytesToInt()配套使用
 * @param value
 *            要转换的int值
 * @return byte数组
 */
public static byte[] intToBytes(int value )
{
    byte[] src = new byte[4];
    src[3] =  (byte) ((value>>24) & 0xFF);
    src[2] =  (byte) ((value>>16) & 0xFF);
    src[1] =  (byte) ((value>>8) & 0xFF);
    src[0] =  (byte) (value & 0xFF);
    return src;
}
/**
 * byte数组中取int数值,本方法适用于(低位在前,高位在后)的顺序。
 *
 * @param ary
 *            byte数组
 * @param offset
 *            从数组的第offset位开始
 * @return int数值
 */
public static int bytesToInt(byte[] ary, int offset) {
    int value;
    value = (int) ((ary[offset]&0xFF)
            | ((ary[offset+1]<<8) & 0xFF00)
            | ((ary[offset+2]<<16)& 0xFF0000)
            | ((ary[offset+3]<<24) & 0xFF000000));
    return value;
}



还有(高位在前,低位在后)的转换方法的就不贴了blog

有须要的参考原来的文章,仍是贴个地址把
开发

http://blog.csdn.net/sunnyfans/article/details/8286906cmd

相关文章
相关标签/搜索