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

C# Discussion :

Convertir un uint/long en longueur bytes


Sujet :

C#

  1. #1
    Membre averti
    Homme Profil pro
    rien
    Inscrit en
    Septembre 2012
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : rien

    Informations forums :
    Inscription : Septembre 2012
    Messages : 38
    Par défaut Convertir un uint/long en longueur bytes
    salut !

    j'viens demander un petit coup d'pouce a propos de convertion de bytes.

    Je m'explique , par exemple je met ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    long test = 010203040506070809
    et je voudrais l'obtenir en bytes car j'ai une fonction d'envoie qui gère uniquement en bytes , donc comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    0x01, 0x02, 0x03 (ect vous m'avez compris)
    donc le passez en big endian ect. Mais c'est pas le problème , j'ai déjà mon code de convertion de uint en LE :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
            byte[] To4BytesLE(uint data)
            {
                byte[] b = new byte[4];
                b[0] = (byte)data;
                b[1] = (byte)(((uint)data >> 8) & 0xFF);
                b[2] = (byte)(((uint)data >> 16) & 0xFF);
                b[3] = (byte)(((uint)data >> 24) & 0xFF);
                return b;
            }
    Mais le problème c'est que mon long ou mon uint peut avoir une longueur aléatoire. Donc je me suis dit qu'il faudrait mettre une condition et c'est pour celà que je demande de l'aide , mettre une condition pour que ça calcul la longueur automatiquement et que ça retourne (un autre exemple) 010203 en 0x01 , 0x02 , 0x03.

    ça a l'air confu mais ça m'aiderais beaucoup ,

    Merci !

  2. #2
    Membre chevronné
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2011
    Messages : 610
    Par défaut
    Salut,

    Je n'ai pas tout compris mais pour passer de long à byte la fonction suivante ne te suffit pas?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    long test = 010203040506070809;
                byte[] bc = BitConverter.GetBytes(test);
                Console.WriteLine(BitConverter.ToString(bc));

  3. #3
    Membre averti
    Homme Profil pro
    rien
    Inscrit en
    Septembre 2012
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : rien

    Informations forums :
    Inscription : Septembre 2012
    Messages : 38
    Par défaut
    Citation Envoyé par FrameBreak Voir le message
    Salut,

    Je n'ai pas tout compris mais pour passer de long à byte la fonction suivante ne te suffit pas?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    long test = 010203040506070809;
                byte[] bc = BitConverter.GetBytes(test);
                Console.WriteLine(BitConverter.ToString(bc));
    Non , car j'obtient 19-47-FE-7C-9C-3F-24-00 , et j'veux obtenir 01-02-03-04-05-06-07-08-09 , tu vois la différence ? J'veux pas modifier la valeur pour calculé quelques choses en bytes , mais juste changer le format pour les mettres en bytes.

  4. #4
    Membre chevronné
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2011
    Messages : 610
    Par défaut
    Dans ce cas là, je pense qu'il faut passer par une conversion en chaîne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                long test = 010203040506070809;
                byte[] bc = Encoding.ASCII.GetBytes(test.ToString());
                Console.WriteLine(Encoding.ASCII.GetString(bc));

  5. #5
    Membre émérite
    Homme Profil pro
    Développeur / architecte
    Inscrit en
    Juillet 2009
    Messages
    473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur / architecte

    Informations forums :
    Inscription : Juillet 2009
    Messages : 473
    Par défaut
    Et qu'est ce que c'est senser donner si:
    ?

  6. #6
    Membre averti
    Homme Profil pro
    rien
    Inscrit en
    Septembre 2012
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : rien

    Informations forums :
    Inscription : Septembre 2012
    Messages : 38
    Par défaut
    je me suis déjà trompé , tout les uint & ulong seront avec un "0x" devant , ce sont des offsets.

  7. #7
    Membre chevronné
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2011
    Messages : 610
    Par défaut
    Citation Envoyé par iMCSx Voir le message
    je me suis déjà trompé , tout les uint & ulong seront avec un "0x" devant , ce sont des offsets.
    Tout d'abord tes "0x" sont aussi appelé des Hexadécimaux, ce qui n'est pas de bytes...
    Il te faut donc faire une conversion long ->string ->Hexa du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
                long test = 010203040506070809;
                string hex = string.Empty;
                foreach (char c in test.ToString())
                {
                    //Tes conditions pour les convertir par paire
                    hex += String.Format("{0:X2}", Convert.ToInt32(c));
                }

  8. #8
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2008
    Messages : 231
    Par défaut
    Je pense que tu te trompes sur quelque chose.

    Un uint a une longueur de 4 bytes, que ta valeur soit 1 ou uint.MaxValue.
    Un long a une longueur de 8 Bytes, idem ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    long test = 010203040506070809;
    Ce n'est pas des Bytes[]. C'est un long, si tu veux 01-02-03-04-05-06-07-08-09 alors déjà ce n'est ni un long, ni un uint, ni aucun type connu. Tu as une longueur de 9 Bytes, et à ma connaissance aucun type (pour des chiffres) ne fait une longueur de 9 Bytes (byte[9]). Sauf un string de 9 caractères, mais ce n'est pas ce que tu veux.
    Donc pour faire ma démonstration je retire 09.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new byte[8] { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08}
    Ceci est un long (je ne sais pas le résultat mais c'est pas ce que l'on cherche)

    Et donc pour ta conversion c'est ce tableau de bytes que doit passer à ta fonction pour travailler ta conversion.

    Les codes n'ont pas la même valeur. Je te déconseille de les écrire en string, et de les parser etc.... Si tu travailles directement sur des bytes c'est que tu as des problématiques de performances. Donc évite les trucs qui vont t'en faire perdre. Si au finale se sont des messages, alors fait des trames avec des header et structure ta donnée, ce qu'il facilitera la conversion dans les deux sens.

  9. #9
    Membre averti
    Homme Profil pro
    rien
    Inscrit en
    Septembre 2012
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : rien

    Informations forums :
    Inscription : Septembre 2012
    Messages : 38
    Par défaut
    merci de vos réponse , mais je me suis finalement débrouillé autrement , en faite je crée une bibliothèque de classe , pour l'utilisé dans des projets , j'injecte de la mémoire dans la ps3 en temps réels donc je peux pas toujours faire se que je veux ^^

    J'ai une autre question , mais j'vais crée un nouveau topic , merci de vos réponse tout de même !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. convertir un objet en tableau de byte
    Par hammag dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 12/10/2006, 13h12
  2. [C#] Comment convertir un type long en DateTime ?
    Par guillaume16 dans le forum C#
    Réponses: 4
    Dernier message: 22/06/2006, 14h45
  3. Convertir un entier long en string
    Par aroueche dans le forum C
    Réponses: 5
    Dernier message: 12/07/2004, 13h48
  4. convertir un nom long (win32) en format dos (8+3)
    Par kylekiller dans le forum Langage
    Réponses: 2
    Dernier message: 30/08/2002, 13h34

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