在实际开发中,我们经常遇到与嵌入式进行通信的情况,而由于一些嵌入式设备的处理能力较差,往往以二进制的数据流的形式传输数据,在此将这些常见的转换做一总结。
注意:默认传输时使用小端模式
将字节流转换为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