2010-12-06 3 views
0
Perl 
x=1 
y=222 

java 
x=257 
y=222 

Je comprends que je ne peux mettre qu'un nombre entier compris entre 0 et 256 dans un octet. Comment envoyer un entier supérieur à 256 dans un pack(C*) ou byte[][]?Valeur erronée dans le tableau Byte via le socket Perl et Java

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

Parfois, quand j'envoie une valeur de Perl à Java, je prends une valeur négative dans le côté Java, le problème est que je veux garder tableau d'octets uniquement.

Voici le code java de mousePressed sur la balançoire (je veux envoyer au serveur le clic en cours)


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 

de Merci

+3

Si 'x' est un octet en Java, il ne peut pas avoir peut-être la valeur 257. Les valeurs des octets non signés sont compris entre 0 et 255. Et je crois que toutes les primitives Java sont signées, si Java octets vont de - 128 à 127. Veuillez publier le code Java qui écrit cette sortie. – cdhowie

+0

La première chose qui est venue à l'esprit était dataoutputstream côté java, mais je pense que vous devriez éviter d'utiliser dataoutputstream ici ... – khachik

+0

@cdhowie, nous ne mentionnerons pas char, ou boolean. ;) –

Répondre

0

octets Java sont signés et ils tiendront leur signe quand vous essayez de convertir en entier. Par conséquent, si vous voulez extraire un entier à partir d'un tableau de taille-4 octets, vous devez faire quelque chose comme

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

Si vous laissez le « & 255 », vous ne serez probablement pas obtenir le numéro que vous étiez

0

Vous pouvez envoyer des nombres d'éléments 32 bits de la manière suivante.

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. 
Questions connexes