在实际开发中,我们经常遇到与嵌入式进行通信的情况,而由于一些嵌入式设备的处理能力较差,往往以二进制的数据流的形式传输数据,在此将这些常见的转换做一总结。
注意:默认传输时使用小端模式
将字节流转换为int类型数据
1
2
3
4
|
public static int getInt( byte [] bytes) {
return ( 0xff & bytes[ 0 ]) | ( 0xff00 & (bytes[ 1 ] << 8 )) | ( 0xff0000 & (bytes[ 2 ] << 16 ))
| ( 0xff000000 & (bytes[ 3 ] << 24 ));
}
|
将字节流转换为long类型数据
1
2
3
4
5
6
|
public static long getLong( byte [] bytes) {
return ((0xffL & ( long ) bytes[ 0 ]) | (0xff00L & (( long ) bytes[ 1 ] << 8 )) | (0xff0000L & (( long ) bytes[ 2 ] << 16 ))
| (0xff000000L & (( long ) bytes[ 3 ] << 24 )) | (0xff00000000L & (( long ) bytes[ 4 ] << 32 ))
| (0xff0000000000L & (( long ) bytes[ 5 ] << 40 )) | (0xff000000000000L & (( long ) bytes[ 6 ] << 48 ))
| (0xff00000000000000L & (( long ) bytes[ 7 ] << 56 )));
}
|
将字节流转换为float类型数据
1
2
3
4
|
public static float getFloat( byte [] bytes){
int temp=getInt(bytes);
return Float.intBitsToFloat(temp);
}
|
将字节流转换为double类型数据
1
2
3
4
|
public static double getDouble( byte [] bytes){
long temp=getLong(bytes);
return Double.longBitsToDouble(temp);
}
|
将int类型数据转换为字节流
1
2
3
4
5
6
7
8
|
public static byte [] getByteFromInt( int data){
byte [] temp= new byte [ 4 ];
temp[ 0 ]=( byte )( 0xFF &(data));
temp[ 1 ]=( byte )( 0xFF &(data>> 8 ));
temp[ 2 ]=( byte )( 0xFF &(data>> 16 ));
temp[ 3 ]=( byte )( 0xFF &(data>> 24 ));
return temp;
}
|
将long类型数据转换为字节流
1
2
3
4
5
6
7
8
9
10
11
12
|
public static byte [] getByteFromLong( long data){
byte [] temp= new byte [ 8 ];
temp[ 0 ]=( byte )( 0xFF &(data));
temp[ 1 ]=( byte )( 0xFF &(data>> 8 ));
temp[ 2 ]=( byte )( 0xFF &(data>> 16 ));
temp[ 3 ]=( byte )( 0xFF &(data>> 24 ));
temp[ 4 ]=( byte )( 0xFF &(data>> 32 ));
temp[ 5 ]=( byte )( 0xFF &(data>> 40 ));
temp[ 6 ]=( byte )( 0xFF &(data>> 48 ));
temp[ 7 ]=( byte )( 0xFF &(data>> 56 ));
return temp;
}
|
将float类型数据转换为字节流
1
2
3
4
5
6
7
8
9
|
public static byte [] getByteFromFloat( float data){
byte [] temp= new byte [ 4 ];
int tempInt=Float.floatToIntBits(data);
temp[ 0 ]=( byte )( 0xFF &(tempInt));
temp[ 1 ]=( byte )( 0xFF &(tempInt>> 8 ));
temp[ 2 ]=( byte )( 0xFF &(tempInt>> 16 ));
temp[ 3 ]=( byte )( 0xFF &(tempInt>> 24 ));
return temp;
}
|
将double类型数据转换为字节流
1
2
3
4
5
6
7
8
9
10
11
12
13
|
public static byte [] getByteFromDouble( double data){
byte [] temp= new byte [ 8 ];
long tempLong=Double.doubleToLongBits(data);
temp[ 0 ]=( byte )( 0xFF &(tempLong));
temp[ 1 ]=( byte )( 0xFF &(tempLong>> 8 ));
temp[ 2 ]=( byte )( 0xFF &(tempLong>> 16 ));
temp[ 3 ]=( byte )( 0xFF &(tempLong>> 24 ));
temp[ 4 ]=( byte )( 0xFF &(tempLong>> 32 ));
temp[ 5 ]=( byte )( 0xFF &(tempLong>> 40 ));
temp[ 6 ]=( byte )( 0xFF &(tempLong>> 48 ));
temp[ 7 ]=( byte )( 0xFF &(tempLong>> 56 ));
return temp;
}
|
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:http://www.jianshu.com/p/35b69f1acdd9