繁体   English   中英

通过Perl和Java套接字的Byte数组中的值错误

[英]Wrong value in Byte array through Perl and Java socket

Perl
x=1
y=222

java
x=257
y=222

我了解我只能将0到256之间的整数放在一个字节中。 如何在pack(C*)byte[][]发送大于256的整数?

$data = $n->read($data2, 6);
@arr =  unpack("C*", $data2);

有时,当我从Perl向Java发送值时,我在Java端遇到了一个负值,问题是我只想保留字节数组。

这是挥杆时MousePressed的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

谢谢

Java字节是带符号的,当您尝试转换回整数时,它们将保留其符号。 因此,如果要从长度为4的字节数组中提取整数,则需要执行以下操作

int num = 0;
for(int i=0;i<4;i++){
    num <<= 8;
    num |= byteArray[i] & 255;
}
return num;

如果省略“&255”,则可能无法获得预期的数字

您可以通过以下方式发送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.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM