浏览 5414 次
锁定老帖子 主题:将浮点float转换成byte[] 数组
精华帖 (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));
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-12-10
牛逼,有理、有力、有节操啊!
很久没有看到这样的分析,除了原来和C的之间数据交互时,才有机会去研究这些。 |
|
返回顶楼 | |
发表时间: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 } } |
|
返回顶楼 | |