2010-10-22 16 views
0

Je suis en train d'écrire un fichier ROM patcher et je suis venu à cela dans la documentation:comment ajouter plusieurs octets ensemble?

The next three bytes are the place in the destination file 
(the file to be patched) where a change is to be made. 

The two bytes following that are the length of the amount 
of data to be changed. 

Comment pourrais-je transformer ces trois et deux octets dans un seul numéro en java correctement?

+0

Lire l'octet suivant, OU avec le résultat (votre temp var), puis décaler le résultat par 8 bits gauche, répétition. – mojuba

+2

@mojuba - Ecrivez ceci comme l'une des réponses proposées à la question afin qu'elle puisse être acceptée par William s'il la trouve pour répondre à la question. – AndyPerfect

+0

@mojuba Est-ce un OU normal ou un OU logique? aussi je le changerais en codant "<< 8" à droite? – William

Répondre

1

Assurez-vous d'utiliser un descendant de InputStream (octet vs entrée char).

La question la plus importante à se poser est de savoir si les données sont stockées de façon «little-endian» ou «big-endian». Je vais supposer little-endian (x86). Pour le nombre à trois octets:

FileInputStream fs = new FileInputStream(...); 

int byte1 = fs.read(); 
int byte2 = fs.read(); 
int byte3 = fs.read(); 
int data = (byte3 << 16) | (byte2 << 8) | byte1; 

Pour le petit-boutiste, le premier octet lu est l'octet le moins significatif.

Si vous avez besoin de grand-boutiste, changer la dernière ligne:

int data = (byte1 << 16) | (byte2 << 8) | byte3; 
+0

merci, je pense que ça va marcher. – William

2

Étrangement, je vois une réponse valable par Joey, qu'il supprimé il y a 10 minutes:

(byte1 << 16) + (byte2 << 8) + byte3 

La seule chose que je dois ajouter: ne pas convertir octets que vous lisez à partir du type InputStream à byte (InputStream#read renvoie la valeur int comprise entre 0 et 255). Cela va par exemple 255 dans -1, et nous n'avons pas besoin d'un tel effet secondaire.

Ainsi, il pourrait ressembler à

(in.read() << 16) + (in.read() << 8) + in.read() 
Questions connexes