IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Conversion de code C# vers Java (unsigned)


Sujet :

Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Conversion de code C# vers Java (unsigned)
    Bonjour,
    Depuis ce matin j’essaie de convertir un code qui calcul un CRC16B pour faire du NFC.

    J'ai trouvé un bout de code C# qui fonctionne mais a cause des unsigned etc, je n'arrive pas à obtenir le même résultat en JAVA

    Voilà le bout de code C# :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
     
    namespace CRC_B
    {
        class Program
        {
            static char __crcBDefault = (char)0xffff;
            private static char UpdateCrc(byte b, char crc)
            {
                byte ch = (byte)(b ^ (byte)(crc & 0x00ff));
                ch = (byte)(ch ^ (ch << 4));
                return (char)((crc >> 8) ^ (ch << 8) ^ (ch << 3) ^ (ch >> 4));
            }
     
            public static char ComputeCrc(byte[] bytes)
            {
                char res = __crcBDefault;
                for (int i = 0; i < bytes.Length; i++)
                {
                    res = UpdateCrc(bytes[i], res);
                }
     
     
                return (char)~res;
            }
     
            static void Main(string[] args)
            {
                // test case 1 0xFC, 0xD1 
                var bytes = new byte[] { 0x0F, 0xAA, 0xFF };
                char crc = ComputeCrc(bytes);
                byte[] cbytes = BitConverter.GetBytes(crc);
                Console.WriteLine("First (0xFC): {0:X}\tSecond (0xD1): {1:X}", cbytes[0], cbytes[1]);
     
                // test case 2 0xCC, 0xC6 
                bytes = new byte[] { 0x00, 0x00, 0x00 };
                crc = ComputeCrc(bytes);
                crcint = crc;
                cbytes = BitConverter.GetBytes(crc);
                Console.WriteLine("First (0xCC): {0:X}\tSecond (0xC6): {1:X}", cbytes[0], cbytes[1]);
     
                Console.ReadLine();
            }
        }
    }
    Et le code que j'ai converti en JAVA mais qui ne me donne pas de résultat satisfaisant
    J'ai un soucis avec les unsigned, par exemple la ligne "(byte)(crc & 0x00ff)" me retourne -16 en Java et 255 en C#...
    Si j'utilise un char à la place du byte ça fonctionne mais le calcul d'après devient incorrect.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    package mypackage;
     
    public class NFCUtils 
    {
     
    	static final char __crcBDefault = 0xffff; 
     
    	private static char UpdateCrc(byte b, char crc) 
    	{ 
    		char ch = (char)(b ^ (byte)(crc & 0x00ff));
    		char ret =  (char)((crc >> 8)^(ch << 8)^(ch << 3)^(ch >> 4));
    		return ret;
    	} 
     
    	public static char ComputeCrc(byte[] bytes) 
    	{ 
    		char res = __crcBDefault; 
    		for (int i = 0; i < bytes.length; i++) 
    		{
    			res = UpdateCrc(bytes[i], res); 
    		}
     
    		return (char) ~res; 
    	} 
     
    }
    Merci d'avance pour votre aide je ne sais plus trop comment faire

  2. #2
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2007
    Messages
    697
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 697
    Points : 1 241
    Points
    1 241
    Par défaut
    As tu essayé de remplacer >> par >>> ?

    Ce dernier est utilisé pour faire les opérations de décalage de manière non signé.

Discussions similaires

  1. Conversion d'un bout de code PHP vers Java
    Par chatlumo dans le forum Débuter avec Java
    Réponses: 7
    Dernier message: 09/10/2012, 17h29
  2. Conversion de code ruby vers C#
    Par Abalalojik dans le forum Ruby
    Réponses: 1
    Dernier message: 30/08/2011, 00h13
  3. Portage de code Delphi vers Java
    Par dtcSearch dans le forum Langage
    Réponses: 1
    Dernier message: 19/05/2010, 16h41
  4. Conversion de code VBA en JAVA (BDD cnx)
    Par clipper67 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 17/01/2010, 19h48
  5. [VB.net]problème de conversion de code c# vers VB.net
    Par cladsam dans le forum Windows Forms
    Réponses: 2
    Dernier message: 18/10/2005, 14h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo