论坛首页 综合技术论坛

将浮点float转换成byte[] 数组

浏览 5399 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-12-08  

     在对float类型数据做持久化过程中需要将float转化成byte[] 类型的数据。最简单的办法是将float类型的数据转化成String,然后调用String的getBytes()方法就行了。但是使用这个方式存储的数据占用的磁盘空间更大,一般需要6个字节,而且随着精度越过占用的字节数也越大。

 

     更好的办法是用是先将浮点数转化成int类型,然后将int类型转化成byte[] 数组保存,这样保存的字节长度恒定为4个字节。代码如下:float fvalue= 1.20004f;

byte[] data = byte[4];
int ivalue = Float.floatToIntBits(fvalue);

data[0] = (byte)(ivalue >> 24);
data[1] = (byte)(ivalue >> 16);
data[2] = (byte)(ivalue >>  8);
data[3] = (byte) ivalue;
return data;

   这个操作使用了左移动操作来将int赋值给长度为4的int数组。

 

   如果要将byte[4] 转化为float,可以执行以下操作:

int ivalue = ((data[0] & 0xFF) << 24) | ((data[1] & 0xFF) << 16)
				| ((data[2] & 0xFF) << 8) | (data[3] & 0xFF);

System.out.println(Float.intBitsToFloat(ivalue));

 

   发表时间:2012-12-10  
牛逼,有理、有力、有节操啊!
很久没有看到这样的分析,除了原来和C的之间数据交互时,才有机会去研究这些。
0 请登录后投票
   发表时间:2012-12-10  
其实已经有API提供这个功能了。
import java.nio.ByteBuffer;
import java.util.Arrays;

public class FloatBytes {
	public static void main(String[] args) {
		byte[] data = ByteBuffer.allocate(4).putFloat(1.20004f).array();
		System.out.println(Arrays.toString(data)); // [63, -103, -102, -23]
		float value = ByteBuffer.wrap(data).getFloat();
		System.out.println(value); // 1.20004
	}
}
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics