如果我单独取4个byte;
然后用floatNum = Float.intBitsToFloat((bytein[3]&0xFF)<<24 | (bytein[2]&0xFF)<<16 | (bytein[1]&0xFF)<<8 | (bytein[0]&0xFF));
可以得到正确的结果;
可是如果一次取byte[] buffer = new byte[ buffersize ];
然后通过循环
for (j = 0; j < Num ; j++){
byteInfo[0] = buffer[ j*4 ];
byteInfo[1] = buffer[ j*4+1 ];
byteInfo[2] = buffer[ j*4+2 ];
byteInfo[3] = buffer[ j*4+3 ];
floatNum = Float.intBitsToFloat((bytein[3]&0xFF)<<24 | (bytein[2]&0xFF)<<16 | (bytein[1]&0xFF)<<8 | (bytein[0]&0xFF));
}
这样得到的值就不对.

解决方案 »

  1.   

    我测试的时候在C端发送:
    float* ff;
    ff = new float[ 3000 ];
    for (int k=0; k<3000 ; k++){
    ff[k] = (float)2.357;
    }
    sAccept.Write((char*)ff, 12000, 10);
    delete[] ff;
    在java端接收前2963个数据时输出都是对的,可是到了后面的,全为0。这是什么原因啊?
      

  2.   

    在发送协议中加入一个字段(n个byte)来说明此次发送的数据byte数,那一端接受数据,先得到这个字段,然后开辟相应的缓冲区,接收数据!java用Data Stream么?
    同时注意网络字节序
      

  3.   

    java端
    int buffersize = n*4;
    byte[] buffer = new byte[ buffersize ];
    is.read( buffer );
    for (j = 0; j < n ; j++){
    byteInfo[0] = buffer[ j*4 ];
    byteInfo[1] = buffer[ j*4+1 ];
    byteInfo[2] = buffer[ j*4+2 ];
    byteInfo[3] = buffer[ j*4+3 ];
    float dd = Float.intBitsToFloat((bytein[3]&0xFF)<<24 | (bytein[2]&0xFF)<<16 | (bytein[1]&0xFF)<<8 | (bytein[0]&0xFF));
    }
    buffer有开相应的大小,可是到了后面的数就是接收不到。
      

  4.   

    adolfdi(牛肉火锅)说的有理,网络传输中可能存在控制字符,加校验位比较好!