convertir du court au octet, et vice-versa en Java
Je suis en train de convertir un court en 2 octets...et puis à partir de ces 2 octets essayer d'obtenir la même valeur. Pour cela, j'ai écrit ce code:
short oldshort = 700;
byte 333= (byte) (oldshort);
byte byte2= (byte) ((oldshort >> 8) & 0xff);
short newshort = (short) ((byte2 << 8) + byte1);
System.out.println(oldshort);
System.out.println(newshort);
Pour la valeur de 700 (oldshort), newhosrt est 444. Après quelques tests, il looksl ike \ce code ne fonctionne que pour certaines valeurs. ...Comme si oldshort=50, alors cela fonctionnera très bien..mais si c'est -200, ou de plus grandes valeurs de 127 (je crois), ça ne fonctionne pas. Je pense qu'il y a un problème avec la signature d'octets, en complément à deux de la valeur, etc...mais je ne peux pas comprendre comment le résoudre.
Une idée?? Native façon de le faire en java?? Merci à l'avance!
Ne pas utiliser plus (+) lors de la recombinaison, vous voulez bit à bit OU (|).
comment sont-ils différents dans ce cas?
La différence est que le OU les acides gras saturés, tandis que d'AJOUTER de porte. Plus au point, lorsque vous essayez de faire les opérations bit à bit, l'utilisation d'un opérateur au niveau du bit. Si vous souhaitez que le bit à bit complément de
comment sont-ils différents dans ce cas?
La différence est que le OU les acides gras saturés, tandis que d'AJOUTER de porte. Plus au point, lorsque vous essayez de faire les opérations bit à bit, l'utilisation d'un opérateur au niveau du bit. Si vous souhaitez que le bit à bit complément de
x
, vous ne pouvez pas écrire - 1 - x
, le feriez-vous?OriginalL'auteur arakn0 | 2010-06-25
Vous devez vous connecter pour publier un commentaire.
Lors de la recombinaison, vous avez besoin de masquer le byte1 pour l'empêcher d'être signe étendu.
E. g.
EDIT:
Toutes les opérations sur les octets et les shorts en java sont effectués par des entiers. Donc, lorsque vous écrivez
+byte1
, ce qui se passe vraiment, c'est que l'octet est d'abord exprimées en nombre entier (signe étendu). Il y aura toujours la même valeur, mais a maintenant plus de bits. On peut alors masquer le bas de 8 bits pour obtenir l'original de la 8-bits de court - sans le signe.Est (byte1 & 0xFF) la rend int?
Les opérations sur les types intégraux plus petit qu'un int sont d'abord implicitement convertie en un entier (int). Donc, avant de 0xFF est anded avec la valeur, la valeur est d'abord signe étendu à un int, et puis le masque rejette tous les bits de poids. Mon montage montre plus en détail.
0xFF) supprime les nombres négatifs à partir de l'octet depuis en java un
byte
va ànegative 128
et jusqu'àpositive 127
, il ne peut pas être affecté à un octet comme255
qui est ce0xFF
signifie en hexadécimal. Donc cela faitbyte1
gamme de0 to 255
pas les nombres négatifs et ouais les octets ne peuvent pas tenir 255, donc vous devez les stocker dans unshort
,int
oulong
tout ce qui peut contenir de0 to 255
atleast.OriginalL'auteur mdma
Vous pouvez également utiliser
com.google.common.primitives.Shorts
, qui a des méthodes:public static byte[] toByteArray(short value)
public static short fromByteArray(byte[] bytes)
OriginalL'auteur Liam Williams