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]; //报警值:
开发和硬件通讯的程序,关于变量类型转换,比较麻烦. 类型相互转换,一一对应
由于机顶盒的程序开发年代久远...数值一会儿用2个byte表示,一会儿用4个byte表示.
好在存储方式固定基本都是(低位在前,高位在后)的方式,Java后台统一用int来接收了.
网上逛了下,有写好的现成的方法,偷了个懒就直接拿来用了.
贴个代码:
/**
* 将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;
}
还有(高位在前,低位在后)的转换方法的就不贴了
有需要的参考原来的文章,还是贴个地址把
http://blog.youkuaiyun.com/sunnyfans/article/details/8286906