Android网络程序字节转换(byte&int)
开发中需要自定义udp数据包,还需要与蓝牙设备通信,这都需要直接操作byte数据类型。使用中略有波折,这里简单记录一下操作方法。
java中为大段字节序,所以以下不需要考虑字节序的影响
int转换为byte,使用强制类型转换,结果为int低8位
1 | int i = 0x0102; |
转换完成后b值为2(0x02)。
int转换为byte[]
首先确保int数值在合理区间,再进行操作,以16位数为例:
1 | int i = 0x0102; |
转换完成后buf[0]值为0x01,buf[2]值为0x02。
当位数未32且符号位有可能被使用的情况下,为方便使用,使用long转换为byte数组
byte转换为int
- 值转换
1
2byte b = -1;
int i = b;
此时b为0xff,i为-1(0xffffffff)。
- 位转换
1
2byte b = -1;
int i = b & 0xff;
此时b为0xff,i值为65535(0xff)。
byte[]转换为int,位转换
以16位数为例1
2
3
4
5
6byte[] buf = {
0x01,
0x02,
};
int i = buf[0] & 0xff;
i = (i << 8) | (buf[1] & 0xff);
此时i值为258(0x0102)。
当位数为32且符号位有可能被使用的情况下,为方便使用,使用long解析byte数组,方法同上