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