1

我需要用Java写这个。

虽然我知道如何读取文件,但我对“buff”输出是什么感兴趣,开头的长度是多少?

char              *buff;
unsigned char     *aux;


while(fgets (buff+2, length, fin)){
    len = strlen (buff + 2) + 2;
    aux = (unsigned char *) &len;
    buff[1] = aux[0];
    buff[0] = aux[1];
    ...
    send (sd, buff, len, 0);

}

但我不明白这一点:

aux = (unsigned char *) &len;
buff[1] = aux[0];
buff[0] = aux[1];

提前致谢。

4

2 回答 2

0

这段代码:

aux = (unsigned char *) &len;
buff[1] = aux[0];
buff[0] = aux[1];

创建存储在 中的整数值的字节数组视图len。在 Java 中,你不能做完全相同的事情,但你可以通过几种方式得到你想要的。最简单的就是位屏蔽和移位:

int len = ...;
byte[] buff = ...;
byte[0] = (byte) (len & 0xff);
byte[1] = (byte) ((len >> 8) & 0xff);

另一种可能性是使用 a ByteBuffer,但对于这样一个简单的操作来说,这似乎有点过分了。

于 2012-10-04T19:37:50.173 回答
0

buff似乎是用于从文件中读取数据的缓冲区。看起来程序假设len最多只有两个 (sizeof(unsigned char)) 字节长。因此,它通过将 的地址解析len为an来打包 的最低两个字节,从而抓取 的最低两个字节并将它们粘贴到 的最低两个字节中。buf[1:0]lenunsigned char *lenbuff

于 2012-10-04T19:18:46.403 回答