簡體   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