在網(wǎng)絡編程中,出于節(jié)約帶寬或者編碼的需要,通常需要以原生方式處理long和int,而不是轉換為string。
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
|
public class ByteOrderUtils { public static byte [] int2byte( int res) { byte [] targets = new byte [ 4 ]; targets[ 3 ] = ( byte ) (res & 0xff ); // 最低位 targets[ 2 ] = ( byte ) ((res >> 8 ) & 0xff ); // 次低位 targets[ 1 ] = ( byte ) ((res >> 16 ) & 0xff ); // 次高位 targets[ 0 ] = ( byte ) (res >>> 24 ); // 最高位,無符號右移。 return targets; } public static int byteArrayToInt( byte [] b){ byte [] a = new byte [ 4 ]; int i = a.length - 1 ,j = b.length - 1 ; for (; i >= 0 ; i--,j--) { //從b的尾部(即int值的低位)開始copy數(shù)據(jù) if (j >= 0 ) a[i] = b[j]; else a[i] = 0 ; //如果b.length不足4,則將高位補0 } int v0 = (a[ 0 ] & 0xff ) << 24 ; //&0xff將byte值無差異轉成int,避免Java自動類型提升后,會保留高位的符號位 int v1 = (a[ 1 ] & 0xff ) << 16 ; int v2 = (a[ 2 ] & 0xff ) << 8 ; int v3 = (a[ 3 ] & 0xff ) ; return v0 + v1 + v2 + v3; } public static byte [] long2byte( long res) { byte [] buffer = new byte [ 8 ]; for ( int i = 0 ; i < 8 ; i++) { int offset = 64 - (i + 1 ) * 8 ; buffer[i] = ( byte ) ((res >> offset) & 0xff ); } return buffer; } public static long byteArrayToLong( byte [] b){ long values = 0 ; for ( int i = 0 ; i < 8 ; i++) { values <<= 8 ; values|= (b[i] & 0xff ); } return values; } } |
以上就是小編為大家?guī)淼膉ava int轉byte和long轉byte的方法全部內容了,希望大家多多支持服務器之家~