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

相關文章
相關標籤/搜索