我用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;则,可以正确得到,这是为什么?
int numInt;
double numDouble;
long numLong;
}Type;此时,double类型得到的值不正确,如果改变顺序,如:typedef struct{
double numDouble;
int numInt;
long numLong;
}Type;则,可以正确得到,这是为什么?
应该首先将数据转化为字节数组
c的char[] java的byte[]
然后统一指定长度
比如说传送一个int类型的数据
就应该转成char[4],java以byte[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型,这样会比较好。