Byte 常用转换

思路:
以 int 作为例子, 首先要知道他们的换算公式。 1 int = 4 byte ,1 byte = 8 bit , 一个 bit 是一位二进制。i 和 0xFF 取与得到最低位的 1byte 数据,然后将 i 右移8位再与 0xFF 取与得到第二低位的 1byte数据,以此类推。

1
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
/**
* 将int转换为四个字节的byte数组,高位在前,低位在后
*
* @param i 要转换的int参数
*
* @return 四个字节的byte数组
*/
public static byte[] intToHlBytes4(int i)
{
byte[] result = new byte[4];
result[3] = (byte) (i & 0xFF);
result[2] = (byte) ((i >> 8) & 0xFF);
result[1] = (byte) ((i >> 16) & 0xFF);
result[0] = (byte) ((i >> 24) & 0xFF);
return result;
}
/**
* 将int转换为四个字节的byte数组,低位在前,高位在后
*
* @param i 要转换的int参数
*
* @return 四个字节的byte数组
*/
public static byte[] intTolhBytes4(int i)
{
byte[] result = new byte[4];
result[0] = (byte) (i & 0xFF);
result[1] = (byte) ((i >> 8) & 0xFF);
result[2] = (byte) ((i >> 16) & 0xFF);
result[3] = (byte) ((i >> 24) & 0xFF);
return result;
}
/**
* 从byte数组的指定位置向后取出4位转为int数值,低位在前,高位在后
*
* @param bs 原始数组
*
* @param startSet 开始位
*
* @return
*/
public static int hlBytesToInt(byte[] bs, int startSet)
{
int result;
result = (int) ((bs[startSet] & 0xFF) | ((bs[startSet + 1] & 0xFF) << 8) | ((bs[startSet + 2] & 0xFF) << 16)
| ((bs[startSet + 3] & 0xFF) << 24));
return result;
}
/**
* 从byte数组的指定位置向后取出4位转为int数值,高位在前,低位在后
*
* @param bs 原始数组
*
* @param startSet 开始位
*
* @return
*/
public static int bytesToInt2(byte[] bs, int startSet)
{
int result;
result = (int) (((bs[startSet] & 0xFF) << 24) | ((bs[startSet + 1] & 0xFF) << 16)
| ((bs[startSet + 2] & 0xFF) << 8) | (bs[startSet + 3] & 0xFF));
return result;
}
/**
* long型转换为8字节的byte数组 高位在前低位在后
*
* @param l long数据
*
* @return
*/
public static byte[] longToHlBytes8(long l)
{
byte[] result = new byte[8];
for (int i = 0; i < 8; i++)
{
int startSet = (result.length - 1 - i) * 8;
result[i] = (byte) ((l >>> startSet) & 0xFF);
}
return result;
}
/**
* short整数转换为2字节的byte数组 高位在前低位在后
*
* @param s short整数
*
* @return
*/
public static byte[] unsignedShortToByte2(int s)
{
byte[] result = new byte[2];
result[0] = (byte) (s >> 8 & 0xFF);
result[1] = (byte) (s & 0xFF);
return result;
}
/**
* byte数组转换为无符号short整数
*
* @param bs byte数组
*
* @return
*/
public static int byte2ToUnsignedShort(byte[] bs)
{
return byte2ToUnsignedShort(bs, 0);
}
/**
* byte数组转换为无符号short整数
*
* @param bs byte数组
*
* @param startSer 开始位置
*
* @return
*/
public static int byte2ToUnsignedShort(byte[] bs, int startSer)
{
int high = bs[startSer];
int low = bs[startSer + 1];
return (high << 8 & 0xFF00) | (low & 0xFF);
}
/**
* byte数组转换为int整数
*
* @param bs byte数组
*
* @param startSet 开始位置
*
* @return int整数
*/
public static int byte4ToInt(byte[] bs, int startSet)
{
int b0 = bs[startSet] & 0xFF;
int b1 = bs[startSet + 1] & 0xFF;
int b2 = bs[startSet + 2] & 0xFF;
int b3 = bs[startSet + 3] & 0xFF;
return (b0 << 24) | (b1 << 16) | (b2 << 8) | b3;
}
Share