数值类型与byte[]相互t转换

1 篇文章 0 订阅
1 篇文章 0 订阅

     在对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));

 

long 和byte[]的相互转换:

long -> byte[]:

static byte[] toArray(long val) {
		
		int off = 0;
		byte[] b = new byte[8];
		b[off + 7] = (byte) (val >>> 0);
		b[off + 6] = (byte) (val >>> 8);
		b[off + 5] = (byte) (val >>> 16);
		b[off + 4] = (byte) (val >>> 24);
		b[off + 3] = (byte) (val >>> 32);
		b[off + 2] = (byte) (val >>> 40);
		b[off + 1] = (byte) (val >>> 48);
		b[off + 0] = (byte) (val >>> 56);
		return b;

	}

 byte[]->long

static long toLong(byte[] b) {

		int off = 0;
		return ((b[off + 7] & 0xFFL) << 0) +
	       ((b[off + 6] & 0xFFL) << 8) +
	       ((b[off + 5] & 0xFFL) << 16) +
	       ((b[off + 4] & 0xFFL) << 24) +
	       ((b[off + 3] & 0xFFL) << 32) +
	       ((b[off + 2] & 0xFFL) << 40) +
	       ((b[off + 1] & 0xFFL) << 48) +
	       (((long) b[off + 0]) << 56);
	}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值