2017-06-03 3 views
0

Je veux lire un fichier binaire et faire une manipulation sur chaque octet. Je veux tester que je manipule les octets correctement. Je veux définir un byte variable1 à "00000000" puis un autre byte variable2 mis à "00001111" et OU newvariable = variable1 | variable2, décaler la nouvelle variable < < 4 bits, puis imprimer la valeur int.JAVA Byte Manipulation

byte a = 00000000; 
//Convert first oneByte to 4 bits and then xor with a; 
byte b = 00001111; 
byte c = (byte)(a|b); 
c = c << 4; 
System.out.println("byte= " + c + "\n"); 

Je ne sais pas pourquoi je continue à obtenir « types incompatiable: conversion possible de l'octet à lossy int »

+0

Vous pouvez également lire ceci: https://docs.oracle.com/javase/8/docs/technotes/guides/language/binary-literals.html –

Répondre

3

Vous avez besoin de mettre un « 0b » devant ces chiffres pour exprimer des constantes binaires. Le nombre 00001111 est interprété comme un littéral en octal, soit 585 en décimal. L'octet maximum est 127 (puisqu'il est signé). Essayez plutôt 0b00001111.

En tant que littéraux, ceux-ci seront toujours int, donc en fonction de l'endroit où vous effectuez l'assignation, vous devrez peut-être également explicitement descendre à byte.

+0

Ajout de '0b' en face de l'octet a et de l'octet b . Puis setbyte c = (octet) (c << 4); même si le couler par c = c (byte) << 4 fonctionne impression -16 comme prévu! – shayster01

+0

'00001111' est 1111 en octal et 585 en décimal – saka1029

+0

@ saka1029 Bonne prise. Mise à jour de ma réponse – Brick