码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-07-17 07:20:07      阅读:107      评论:0      收藏:0      [点我收藏+]

标签:

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



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

标签:

原文地址:http://my.oschina.net/u/261246/blog/479552

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!