转自: hi Fkama
http://hi.baidu.com/hi%5Fkama/blog/item/7fcea10f8ac2eaefab6457f8.html
CLDC1.0中不支持float,自己处理了一下:
public static int Bytes4ToInt(byte abyte0[])
{
return (0xff & abyte0[0]) << 24 | (0xff & abyte0[1]) << 16 |
(0xff & abyte0[2]) << 8 | 0xff & abyte0[3];
}
public static int[][] intBitsToFloatII(int bits,int flag)
{
long time = System.currentTimeMillis();
// 符号位一位
int sign = bits >>> 31;
System.out.println("符号:" + sign);
// 指数八位 偏移:7FH
byte index = (byte)((byte)((bits >>> 23) & 0xFF) - 0x7F);
// 尾数23尾 加一位固定位
int tail = (bits & 0x007FFFFF) | 0x00800000;
tail <<= index;
int[][] result = new int[1][1];
result[0][0] = tail >>> 23;
System.out.println("整数部分:" + result[0][0]);
// 小数23位
int decimal = tail & 0x007FFFFF;
long tmp = decimal * 1000;
tmp = tmp >>> 23;
System.out.println("小数部分[放大1000]:" + tmp);
result[0][0] = (int)tmp;
System.out.println("小数部分:" + tmp);
System.out.println("系统函数计算结果:" + Float.intBitsToFloat(bits));
System.out.println("耗时:" + (System.currentTimeMillis() - time) + "ms");
return result;
}
/**
* 整型位字节转float
*
* @param bits
* int 整型字节数据
* @param flag
* int 精度:0:2位小数;1:3位小数
* @return int[][] [整数][小数]
*/
public static int[][] intBitsToFloat(int bits,int flag)
{
long time = System.currentTimeMillis();
// 符号位一位
int sign = bits >>> 31;
System.out.println("符号:" + sign);
// 指数八位 偏移:7FH
byte index = (byte)((byte)((bits >>> 23) & 0xFF) - 0x7F);
// 尾数23尾 加一位固定位
int tail = (bits & 0x007FFFFF) | 0x00800000;
tail <<= index;
int[][] result = new int[1][1];
result[0][0] = tail >>> 23;
System.out.println("整数部分:" + result[0][0]);
// 小数23位
int decimal = tail & 0x007FFFFF;
decimal = (decimal * 100) >>> 23;
int decRes = decimal;
int tmp;
// if (flag == 0)//精度:两位小数
// {
// decRes /= 100;
// tmp = decRes % 100;
// if (tmp >= 50)
// {
// decRes++;
// }
// }
// else
// {
// decRes /= 10;
// tmp = decRes % 10;
// if (tmp >= 500)
// {
// decRes++;
// }
// }
result[0][0] = decRes;
System.out.println("小数部分:" + decRes);
System.out.println("系统函数计算结果:" + Float.intBitsToFloat(bits));
System.out.println("耗时:" + (System.currentTimeMillis() - time) + "ms");
return result;
}
////////////////////////////////
调用:
byte[] tt = new byte[4];
tt[0] = bb[17];
tt[1] = bb[16];
tt[2] = bb[15];
tt[3] = bb[14];
for (int i = 0; i < tt.length; i++)
{
// System.out.println(this.b2h(tt[i]));
}
int ff = Bytes4ToInt(tt);
this.intBitsToFloat(ff,0);
//注意网络字节顺序