Perl
x=1
y=222
java
x=257
y=222
据我所知,我只能在一个字节中输入0到256之间的整数。如何在pack(C*)
或byte[][]
?
$data = $n->read($data2, 6);
@arr = unpack("C*", $data2);
有时当我从Perl向Java发送一个值时,我在Java端捕获一个负值,问题是我只想保留字节数组。
这是来自MousePressed on swing的java代码 (我想将当前点击发送到服务器)
public void mousePressed(MouseEvent e) {
Point p = e.getPoint();
byte[] buff = new byte[]{02,00,(byte)p.x,(byte)p.y,00,00};
//write buff on my socket
由于
答案 0 :(得分:0)
Java字节已签名,当您尝试转换回整数时,它们将保留其符号。因此,如果要从长度为4字节的数组中提取整数,则需要执行类似
的操作int num = 0;
for(int i=0;i<4;i++){
num <<= 8;
num |= byteArray[i] & 255;
}
return num;
如果省略“&amp; 255”,你可能无法得到你期望的数字
答案 1 :(得分:0)
您可以通过以下方式发送32位整数。
DataOutputStream dos = ...
dos.writeByte(2);
dos.writeByte(0);
dos.writeInt(p.x);
dos.writeInt(p.y);
dos.writeByte(0);
dos.writeByte(0);
dos.flush(); // assuming you use buffering.