Opérateur bit à bit

creation_inst Messages postés 5 Date d'inscription mardi 2 novembre 2004 Statut Membre Dernière intervention 5 janvier 2005 - 4 nov. 2004 à 17:36
creation_inst Messages postés 5 Date d'inscription mardi 2 novembre 2004 Statut Membre Dernière intervention 5 janvier 2005 - 9 nov. 2004 à 09:55
Bonjour, je suis sur un os, je doit porté le code suivant qui est un calcul de checksum en "c"

//
USHORT ChkSum(UCHAR *sz_msg, // Msg ? coder
USHORT us_lgMsg) // Longueur du message
//
// Description: Calcul le cheksum suivant la m?thode du
polynome X16+X15+X2+1
//

{
register USHORT us_i; // Variable de travail
register USHORT us_crc=0; // CheckSum

while ( us_lgMsg--)
{
us_crc=( ((us_crc >> 8) ^ *sz_msg++) << 8) |
(us_crc & x00ffU);

for ( us_i=0; us_i < 8; us_i++)
us_crc=(us_crc & 0x8000) ? (us_crc << 1) ^ 0x8005 :
us_crc << 1;
}

return(us_crc);
}

A présent , je doit l'ecrire en java. Je ne sais pas si les operateurs bit à bit existe en java?? comment faire pour le porter.
moi j'ai fait:

private byte [] CheckSum(byte[] requete) {

byte[] retour = new byte[2];
int checksum = 0;
int longeur=0;

for (int i=0 ; i<requete.length ; i++) {

checksum = (((checksum >> 8) ^ requete[i]) << 8) |
(checksum & 0x00FF);
for (int b=0 ; b<8; b++){
checksum=(checksum & 0x8000) ?
(checksum<<1) ^ 0x8005 : checksum<<1;
}

}
retour=(byte) checksum;
return (retour);

}

merci de m'aider en me donnant le plus d'infos possibles.

A++

6 réponses

cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 11
4 nov. 2004 à 18:28
GodConan :clown)

et alors?!! ce que t as fait ca ne fonctionne pas ??!!!
moi j y vois aucun prob a vue de nez....
Tous ca me semble etre du java correct.. ;o)
ah! quoi que je n ai jamai utilise l opérateur "^" mais quoi qu il en soit s il n est pas valide tu trouvera l equivalent dans la class Math

GL
0
cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 11
4 nov. 2004 à 23:41
:big) Neodante :big)

Regarde dans les spécifications du langage (java.sun.com)... ce sont les même que le C normalement ... un langage de haut niveau ne veut pas dire dénoué de toutes instructions digne de ce nom ... ;-)
@+

[Responsable www.neogamedev.com]
0
creation_inst Messages postés 5 Date d'inscription mardi 2 novembre 2004 Statut Membre Dernière intervention 5 janvier 2005
8 nov. 2004 à 10:55
Merci pour l'aides. mais le probleme que m'indique le compilo est le suivant: "impossible de convertir de int en boolean" pour la partie rouge de la ligne ci-dessous

checksum=((checksum & 0x8000) ? (checksum<<1) ^ 0x8005 : checksum<<1;

or la convertion de cast ne fonctionne pas lors comment faire ?
soit je ne sais pas coder une conversion, soit il ne les prends pas en comptes.

Merci par avance.....
0
cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 11
8 nov. 2004 à 13:16
:big) Neodante :big)

Effectivement, le langage Java est un langage sûr, qui dit sûr dit j'oublie certaines pratiques du C !
Dans une condition tu dois toujours renvoyer un boolean, c'est à dire :
if (1) ... // Incorrect
if (1 == 1) ... // Correct
if (true) ... // Correct
donc tu devras surement avoir un truc du genre :
checksum=((checksum & 0x8000 != 0) ? (checksum<<1) ^ 0x8005 : checksum<<1;

Aussi idem dans une condition tu ne peux pas faire d'affectation afin d'éviter les bugs (cela m'a sauvé plus d'une fois !) ...

@+

[Responsable www.neogamedev.com]
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 11
8 nov. 2004 à 18:11
GodConan :clown)

et vi ;o) & est un operateur logique pas boolean ;o) ;o) hihi vi c vrai me rapeller plus de ca en C++ ;o) va falloir que je m y remette qd meme ;o)

;o) c trivial mais pas pu me retenir ;o) ... ;o)

++
0
creation_inst Messages postés 5 Date d'inscription mardi 2 novembre 2004 Statut Membre Dernière intervention 5 janvier 2005
9 nov. 2004 à 09:55
Merci à vous deux pour l'aides, enfin cela fonctionne....

A++

:D
0
Rejoignez-nous