从delphi编写的通讯服务器处得到4个字节的数据,该数据代表一个浮点数值,但是查看了JDK的API以后没有找到相应的方法,请大家帮帮忙!!
数据格式如下(标准)D31 D30-D23 D22-D0
浮点数符号位 阶码 尾数010000001 010000000 00000000000000 就是浮点数5.0的字节码表示现在问题就是怎么从010000001 010000000 00000000000000得到float
数据格式如下(标准)D31 D30-D23 D22-D0
浮点数符号位 阶码 尾数010000001 010000000 00000000000000 就是浮点数5.0的字节码表示现在问题就是怎么从010000001 010000000 00000000000000得到float
byte [] rec = new byte[4];
int a = ((rec[3] << 24)
| ((rec[3] & maskInt) << 16)
| ((rec[1] & maskInt) << 8) | (rec[0] & maskInt));
Float.intBitsToFloat(a);
先转成int ,再转成float,转byte[]->int时高低位排列,要和原来int ->byte[]时要一致,你自己试试。
这个方法我查看了一下JDK,在处理的时候有一定的问题我把问题再讲清楚一点,我的socket与服务器连接,我打算用BufferedInputStream来读取数据
使用read(byte,int,int)方法得到byte[],在这个byte[]里包含整数信息,浮点数,和中文字符
整数我使用Byte的intValue()方法得到,中文字符那段byte[]我把它截取出来使用new String(byte[],"GBK")重新编码得到,上面思路不知道如何,各位有什么更好的方法不??
TO: MOEA(MOS)
你的方法我会试一下,先谢了
byte转int通过楼上MOEA的方法就行了float f = Float.intBitsToFloat(0x40A00000);
& 0xff有什么用,和全1与运算,不是不变吗?
是不是为了保证是8位。
public class FloatTest
{
public static void main(String[] args)
{
int maskInt = 0xff;
byte [] rec = new byte[4];
/*用01000000101000000000000000000000也就是5.0来测试*/
rec[3] = (new Byte("40")).byteValue();
rec[2] = (new Byte("A0")).byteValue();
rec[1] = (new Byte("00")).byteValue();
rec[0] = (new Byte("00")).byteValue();
int a = ((rec[3] << 24)
| ((rec[3] & maskInt) << 16)
| ((rec[1] & maskInt) << 8) | (rec[0] & maskInt));
float myFloat = Float.intBitsToFloat(a);
System.out.println(Float.toString(myFloat));
}
}这里的new Byte(string) 的string不知道该怎么写(格式,要求),请过路的就以上面的5.0做例子讲解一下,多谢
0"
at java.lang.NumberFormatException.forInputString(NumberFormatException.
java:48)
at java.lang.Integer.parseInt(Integer.java:468)
at java.lang.Byte.parseByte(Byte.java:122)
at java.lang.Byte.<init>(Byte.java:296)
at person.fane.test.FloatTest.main(FloatTest.java:19)出错信息!!!!!!!!!!!!!!!!!!!!!!
b[0] = 0x40;
b[1] = (byte)0xA0;
b[2] = 0;
b[3] = 0; float f = Float.intBitsToFloat((b[0]<<24)&0xFF000000|(b[1]<<16)&0xFF0000|(b[2]<<8)&0xFF00|b[3]);
System.out.println(a);
float f = Float.intBitsToFloat((rec[3]<<24)&0xFF000000|(rec[2]<<16)&0xFF0000|(rec[1]<<8)&0xFF00|rec[0]);
float myFloat = Float.intBitsToFloat(a);
System.out.println(Float.toString(myFloat));
System.out.println(Float.toString(f));输出:
0
0.0
5.0
int a的值丢失了??WHY??????
kingfish(八百里秦川@龙城异客)
TO: MOEA(MOS)
都是对的
MOEA(MOS)要改成
int a = ((rec[3] << 24)
| ((rec[2] & maskInt) << 16)
| ((rec[1] & maskInt) << 8) | (rec[0] & maskInt));