最近一个项目用到向终端发送数据的方法,终端是16位(4字节)的。所以需要把Int型转换为32位的,在终端按照4个字节读出,写了下面的转换方法:
1public static class MyMath
2{
3 /**
4 * 把一个整数转化为byte array
5 *
6 * @param num
7 * 待转化的整数
8 * @param len
9 * 长度
10 * @return byte array
11 */
12 public static byte[] intToBytes(int num, int len)
13 {
14 byte[] b = new byte[len];
15 int sw = ((len - 1) * 8);
16 int mask = (0xff << sw);
17 for (int l = 0; l < len; l++)
18 {
19 b[l] = (byte)(((uint)num & mask) >> sw);
20 sw -= 8;
21 mask >>= 8;
22 }
23 return b;
24 }
25
26 /**
27 * 把byte [] 转化为int
28 *
29 * @param b
30 * byte[]
31 * @param offset
32 * 开始位置
33 * @param size
34 * 长度
35 * @return int
36 */
37 public static int bytesToInt(byte[] b, int offset, int size) {
38 int num = 0;
39 int sw = 8 * (size - 1);
40 for (int loop = 0; loop < size; loop++) {
41 num |= ((int) b[offset + loop] & 0x00ff) << sw;// 整数太大,清零
42 sw -= 8;
43 }
44 return (num);
45 }
46}
2{
3 /**
4 * 把一个整数转化为byte array
5 *
6 * @param num
7 * 待转化的整数
8 * @param len
9 * 长度
10 * @return byte array
11 */
12 public static byte[] intToBytes(int num, int len)
13 {
14 byte[] b = new byte[len];
15 int sw = ((len - 1) * 8);
16 int mask = (0xff << sw);
17 for (int l = 0; l < len; l++)
18 {
19 b[l] = (byte)(((uint)num & mask) >> sw);
20 sw -= 8;
21 mask >>= 8;
22 }
23 return b;
24 }
25
26 /**
27 * 把byte [] 转化为int
28 *
29 * @param b
30 * byte[]
31 * @param offset
32 * 开始位置
33 * @param size
34 * 长度
35 * @return int
36 */
37 public static int bytesToInt(byte[] b, int offset, int size) {
38 int num = 0;
39 int sw = 8 * (size - 1);
40 for (int loop = 0; loop < size; loop++) {
41 num |= ((int) b[offset + loop] & 0x00ff) << sw;// 整数太大,清零
42 sw -= 8;
43 }
44 return (num);
45 }
46}
测试:
int iPut = 44;
byte[] b = MyMath.intToBytes(iPut, 4);
int i = MyMath.bytesToInt(b, 0, 4);