Lecteur Fichier Bin , recuperer la valeur d'un Hex en Dec

zejo63
Lecteur Fichier Bin , recuperer la valeur d'un Hex en Dec

bonjour ,
J'ai un petit sousis dans la lescture d'un fichier binaire

Je lit les 2 premieres bytes de mon fichier

byte[] byteMoteur = new byte[2];
is.read(byteMoteur);	

Dans mon byte il y a [2,0] ce qui correspond a 02 00 de mon fichier
je n'arrive pas a recuperer la valeur en entier
quand je faire
int I = is.read(byteMoteur);
il m'affiche 2 alors qu'il s'agit de la valeur 512

Quelqu'un purrait il me mettre sur la voi :D

K-lo

Sun wrote:
public int read(byte[] b)Parameters:
b - the buffer into which the data is read.
Returns:
the total number of bytes read into the buffer, or -1 is there is no more data because the end of the stream has been reached.

read retourne le nombre de byte lu au lieu de la valeur ;) (si c'est pas ça alors je suis fini pour l'anglais)
T'as 0x02 et 0x00 soit 2 bytes :arrow: donc ton code est bon dans le sens où il fait ce que tu lui demande et pas ce que tu veux faire.

dont pour obtenir tes valeurs tu peux faire quelque chose de bourrin :

int val = ((int)b[0])<<8 + (int)b[1];

Enfin c'est pas jolie du tout mais ça me faisait plaisir de faire "hurler" fredericmazue :lol:

fredericmazue

Quote:
read retourne le nombre de byte lu au lieu de la valeur

Pas sûr que ça soit ça le problème. Remarque ça pourrait :lol:
Mais il dit "Dans mon byte il y a [2,0] ". Je crois qu'il faut comprendre dans le tableau de bytes.

Quote:
int val = ((int)b[0])<<8 + (int)b[1];
Enfin c'est pas jolie du tout mais ça me faisait plaisir de faire "hurler" fredericmazue

:lol:
Oui c'est pas joli. Mais si vraiment c'est un fichier binaire c'est
ça qu'il faut faire.
Maintenant je trouve bizarre son [2,0]. Ca voudrait dire que c'est codé en Big Endian, et sous Linux et Windows, normalement on a du Little Endian (le contraire donc). Donc il n'est peut être pas si "binaire" que ça son fichier... affaire à suivre...
zejo63

Salut j'ai utiliser ca et ca marche bien

public static int bytestoInt(int nb) throws IOException {

		byte[] bytes = new byte[nb];
		inputS.read(bytes);

		if (bytes == null) {
			return 0;
		}


		StringBuffer hashString = new StringBuffer();

		for (int i = 0; i < bytes.length; ++i) {
			String hex = encodeHex(Integer.toHexString(bytes[i]));

			if (hex.length() == 1) {
				hashString.append(hex.charAt(hex.length() - 1));
			} else {
				hashString.append(hex.substring(hex.length() - 2));
			}
		}

		// return hashString.toString().toUpperCase();
		return Integer.parseInt((hashString.toString()), 16);
	}
fredericmazue

Selon le bon vieux principe "Pourquoi faire simple quand on peut faire compliqué." :lol:
k-lo t'a donné une solution en une ligne de code efficace et tu préfères une solution en 11 lignes (*) et horriblement coûteuse en perfomance et ressources à l'exécution. :lol:
C'est bien, c'est tout l'esprit Java
C'est jrebillat qui va être content. :lol:

(*) lignes comptées après l'appel à read et après le test bytes==null