Bonjour à tous ,
La fonction
System.Convert.ToByte
ne prend que les entiers jusqu'à 127.
Je veux convertir un entier sur octets.
Connaissez-vous une méthode simple ?
D'avance merci pour vos réponses...
![]()
Bonjour à tous ,
La fonction
System.Convert.ToByte
ne prend que les entiers jusqu'à 127.
Je veux convertir un entier sur octets.
Connaissez-vous une méthode simple ?
D'avance merci pour vos réponses...
![]()
si
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 int i = ... ; short int si = i ; // si sur 2 octets de -32768 à 32767
Bonsoir et merci pour vos réponses.
Je dois écrire dans un fichier binaire une valeur numérique sur 2 octets.
Cette valeur est comprise entre 0 et 36600.
Pour écrire j'utilise la méthode classique write(tableau de byte)
Je bloque et je n'arrive vraiment pas !
Help !
Pas de questions techniques par MP ! Le forum est là pour ça...
Tutoriels : Les nouveautés de C# 6 - Accès aux données avec Dapper - Extraction de données de pages web à l'aide de HTML Agility Pack - La sérialisation XML avec .NET (Aller plus loin) - Les markup extensions en WPF
C'est pour sérialiser/désérialiser en binaire ça. Je pense que BitConverter.GetBytes est ce qu'il cherche.
Pas de questions techniques par MP ! Le forum est là pour ça...
Tutoriels : Les nouveautés de C# 6 - Accès aux données avec Dapper - Extraction de données de pages web à l'aide de HTML Agility Pack - La sérialisation XML avec .NET (Aller plus loin) - Les markup extensions en WPF
Bonsoir et grand merci pour vos réponses.
Si j'utilise la méthode
BitConverter.GetBytes
j'obtiens un tableau de 4 valeurs.
Hors l'entier doit tenir sur 2 octets.
Exemple :
12458 => 30AA
Avec la méthode BitConverter.GetBytes
et en écrivant dans un fichier binaire avec write(byte[])
j'obtiens :
AA300000
Cependant j'ai trouvé une méthode, pas très élégante à mon goût, mais quand on est "charette"...
Est-ce pertinent ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 static private byte[] ConvertToByte(Int32 valeur) { string HxVal = valeur.ToString("X4"); Int16 val1 = Int16.Parse(HxVal.Substring(0, 2), System.Globalization.NumberStyles.HexNumber); Int16 val2 = Int16.Parse(HxVal.Substring(2, 2), System.Globalization.NumberStyles.HexNumber); byte[] final = new byte[2]; final[0] = Convert.ToByte(val1); final[1] = Convert.ToByte(val2); return final; }![]()
Tu as juste à traiter le résultat obtenu avec BitConverter.GetBytes pour l'écrire comme tu en as besoin. Faut regarder un peu plus loin que le bout de son nez hein
Bref, si ton entier tient sur 2 octets, tu dois juste écrire les 2 octets en question et pas tout le tableau. Une des surcharges de la méthode Write le permet, en précisant l'index de départ dans le tableau et le nombre d'éléments à écrire.
Merci StormimOn pour ta réponse (mais j'ai un gros nez... et je débute en C#).
J'ai quand même une dernière question :
j'obtiens AA30 pour 12458 alors que ce devrait être 30AA ??
Il y a donc une inversion des 2 bytes lors de la méthode
BitConverter.GetBytes
??
Bonne soirée,![]()
Les octets de poids faibles en premier : c'est conforme à la disposition en mémoire physique des entiers sur les processeurs des PC.
Bonjour !
Merci à tous pour vos réponses, elles ont été très enrichissantes !
![]()
Partager