从delphi编写的通讯服务器处得到4个字节的数据,该数据代表一个浮点数值,但是查看了JDK的API以后没有找到相应的方法,请大家帮帮忙!!
       数据格式如下(标准)D31        D30-D23 D22-D0
浮点数符号位 阶码 尾数010000001 010000000 00000000000000 就是浮点数5.0的字节码表示现在问题就是怎么从010000001 010000000 00000000000000得到float

解决方案 »

  1.   

    int maskInt = 0xff;
    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[]时要一致,你自己试试。
      

  2.   

    不可以  new DataInputStream(socket.getInputStream()).readFloat() 么?
      

  3.   

    5.0肯定没错,我在Delphi下试过的回:humanity(总是偷窥 Java & XML)
    这个方法我查看了一下JDK,在处理的时候有一定的问题我把问题再讲清楚一点,我的socket与服务器连接,我打算用BufferedInputStream来读取数据
    使用read(byte,int,int)方法得到byte[],在这个byte[]里包含整数信息,浮点数,和中文字符
    整数我使用Byte的intValue()方法得到,中文字符那段byte[]我把它截取出来使用new String(byte[],"GBK")重新编码得到,上面思路不知道如何,各位有什么更好的方法不??
    TO: MOEA(MOS)
    你的方法我会试一下,先谢了
      

  4.   

    实际上就是怎么从byte[0],byte[1],byte[2],byte[3]得到一个float的问题
      

  5.   

    不好意思,看错位数,是5.0
    byte转int通过楼上MOEA的方法就行了float f = Float.intBitsToFloat(0x40A00000);
      

  6.   

    请教一下!
    & 0xff有什么用,和全1与运算,不是不变吗?
    是不是为了保证是8位。
      

  7.   


    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做例子讲解一下,多谢
      

  8.   

    Exception in thread "main" java.lang.NumberFormatException: For input string: "A
    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)出错信息!!!!!!!!!!!!!!!!!!!!!!
      

  9.   

    byte[] b = new byte[4];
        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]);
      

  10.   

    不明白啊??int a = (rec[3]<<24)&0xFF00|(rec[3]<<16)&0xFF00|(rec[1]<<8)&0xFF00|rec[0];
    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??????
      

  11.   

    不好意思,写错了,结贴
    kingfish(八百里秦川@龙城异客)
    TO: MOEA(MOS)
    都是对的
    MOEA(MOS)要改成
    int a = ((rec[3] << 24)
                    | ((rec[2] & maskInt) << 16)
                    | ((rec[1] & maskInt) << 8) | (rec[0] & maskInt));