最近一个项目用到向终端发送数据的方法,终端是16位(4字节)的。所以需要把Int型转换为32位的,在终端按照4个字节读出,写了下面的转换方法:
1
public 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

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

测试:
int iPut = 44;
byte[] b = MyMath.intToBytes(iPut, 4);
int i = MyMath.bytesToInt(b, 0, 4);