我用Java向C发送Socket字节流,C收到后会构造一个结构体,结构体中包括的都是Java基本类型,如int、long、double等,Java向C发送的都是byte[]类型,如果Java一个变量一个变量的发送,C收到一个就构造一个变量,这样没有任何问题。但是如果Java把如干个变量的字节流一起发送,C收到后构造结构体,则会出现前面几个变量能够得到而后面几个变量却得不到,C的结构体如下所示:typedef struct{
int numInt;
double numDouble;
long numLong;
}Type;此时,double类型得到的值不正确,如果改变顺序,如:typedef struct{
double numDouble;
        int numInt;
long numLong;
}Type;则,可以正确得到,这是为什么?

解决方案 »

  1.   

    夸平台通讯最好不要用c的或者java的类型来做,这样你很难处理数据长度
    应该首先将数据转化为字节数组
    c的char[]  java的byte[]
    然后统一指定长度
    比如说传送一个int类型的数据
    就应该转成char[4],java以byte[4]接收
      

  2.   

    但是在Java中long是8字节长,而在C中long是4字节,这种情况下如何转换?
      

  3.   

    但是在Java中long是8字节长,而在C中long是4字节,这种情况下如何转换?
    ----------------------------------------------------
    这种情况下,java取long的低4个字节,for example
    long l = xxx;
    byte[] b = new byte[4];
    for (int i=0; i<4; i++) {
        b[i] = l & 0x00000000000000FF;
        l >>= 8;
    }不过这样的话,如果l真的超出了4字节,那么传输的数据就不对了,不过这时你的C的long也容纳不下超过4字节的数据,所以,在C结构中定义为两个long型来接收java的一个long型,这样会比较好。