标签:
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.csdn.net/sunnyfans/article/details/8286906
标签:
原文地址:http://my.oschina.net/u/261246/blog/479552