Syntaxe littérale Pour les tableaux d’octets utilisant la notation hexadécimale ..?

Le compilateur semble être d’accord avec cela (valeurs hexadécimales uniquement):

byte[] rawbytes={0xa, 0x2, 0xf}; 

Mais pas ceci:

 byte[] rawbytes={0xa, 0x2, 0xff}; 

J’ai une erreur “Perte de précision possible trouvée: int requirejs: octet”?

Que fais-je mal – ou les chiffres hexadécimaux à un chiffre sont-ils un cas particulier?

Java 1.5.x.

Comme l’autre l’a déjà dit, l’octet est un type signé en Java. La plage est comprise entre -128 et 127 inclus. Donc, 0xff est égal à -0x01. Vous pouvez utiliser 0xff à la place de -0x01 si vous ajoutez une dissortingbution manuelle:

 byte[] rawbytes={0xa, 0x2, (byte) 0xff}; 

Il y a une autre possibilité en déclarant une fonction d’assistance avec des arguments variables . Cela peut être préférable si vous devez déclarer plusieurs tableaux d’octets.

Exemple de code

 public static byte[] toBytes(int... ints) { // helper function byte[] result = new byte[ints.length]; for (int i = 0; i < ints.length; i++) { result[i] = (byte) ints[i]; } return result; } public static void main(String... args) { byte[] rawbytes = toBytes(0xff, 0xfe); // using the helper for (int i = 0; i < rawbytes.length; i++) { System.out.println(rawbytes[i]); // show it works } } 

“0xFF” est un littéral int pour la valeur décimale 255, qui n’est pas représentable en tant qu’octet.

Pour l’instant, vous devrez le convertir en byte pour indiquer au compilateur que vous voulez vraiment dire -1, comme ceci:

 byte[] rawbytes = { 0xA, 0x2, (byte) 0xFF }; 

Il a été proposé d’append une nouvelle syntaxe littérale d’octets (suffixe y ou Y ) à Java 7. Vous auriez alors pu écrire:

 byte[] rawbytes = { 0xA, 0x2, 0xFFy }; 

Cependant, cette proposition n’a pas été incluse dans la “proposition omnibus pour des littéraux intégraux améliorés”, nous sums donc coincés avec la dissortingbution pour toujours.

byte est signé et 0xff = 255 est trop grand. La plage valide est (-128 .. 127).

Exemple de code:

 public static void main(Ssortingng[] args) { byte b = (byte) 0xff; // = -1 int i = b; // = -1 int j = b & 0xff; // = 255 System.out.printf("b=%s, i=%s, j=%s", b,i,j); }