Valeur hexa dans fichier incohérente

Résolu
yopyBob Messages postés 4 Date d'inscription mardi 2 septembre 2003 Statut Membre Dernière intervention 29 août 2010 - 29 août 2010 à 09:45
yopyBob Messages postés 4 Date d'inscription mardi 2 septembre 2003 Statut Membre Dernière intervention 29 août 2010 - 29 août 2010 à 21:16
Bonjour,

Voilà mon problème, je dois créer un fichier texte avec des champs caractères et insérer une valeur hexa sur un octet.
Mon souci est que la valeur &H80 me renvoie deux octets. Je sais pas trop si je suis clair mais bon un exemple sera plus parlant

Dim fs As FileStream = New FileStream("C:\Temp\MajArtbin2.dat", FileMode.Create, FileAccess.Write, FileShare.Write)
Dim MajArt As BinaryWriter = New BinaryWriter(fs)
MajArt.Write(Encoding.UTF8.GetBytes("1O" & StrDup(256 - 2, " ") & vbLf))
MajArt.Write(Encoding.UTF8.GetBytes("2C000000000007"))
MajArt.Write(ChrW(&H10))
MajArt.Write(ChrW(&H80))
MajArt.Write(ChrW(&H60))
MajArt.Write(Encoding.UTF8.GetBytes("05000000000000000000000000"))
MajArt.Close()

Resultat
1O
2C000000000007?`05000000000000000000000000

Mais quand je regarde mon code binaire, j'ai un souci
Le &H10 10, &H80 C2 80 , &H60 = 60
Ce que je devrais avoir c'est juste 80 en binaire

Si quelqu'un peut m'aider se serait terrible, c'est un fichier très important que j'ai a faire pour une application que je dois mettre en place prochainement.

Merci



YopyBob

7 réponses

Profil bloqué
29 août 2010 à 13:28
Salut yopiBoB
Je crois avoir trouvé la solution à ton problème
Il suffit d'écrire les octets sous forme de tableau de Bytes

 
        Dim tabloctet(0 To 2) As Byte
        Dim i As Integer
        tabloctet(0) = &H10
        tabloctet(1) = &H80
        tabloctet(2) = &H60
        Dim fs As FileStream = New FileStream("C:\Temp\MajArtbin2.dat", FileMode.Create, FileAccess.Write, FileShare.Write)
        Dim MajArt As BinaryWriter = New BinaryWriter(fs)
        MajArt.Write(Encoding.UTF8.GetBytes("1O" & StrDup(256 - 2, " ") & Environment.NewLine))
        MajArt.Write(Encoding.UTF8.GetBytes("2C000000000007"))
        For i = 0 To 2
            MajArt.Write(tabloctet(i))
        Next
        MajArt.Write(Encoding.UTF8.GetBytes("05000000000000000000000000"))
        MajArt.Close()


La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

GRENIER Alain
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
29 août 2010 à 10:03
Salut

Oui, c'est normal, tu utilises ChrW qui fait référence aux "Wide" (unicode je crois), codé sur deux octets. Voir Chr

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
yopyBob Messages postés 4 Date d'inscription mardi 2 septembre 2003 Statut Membre Dernière intervention 29 août 2010
29 août 2010 à 10:08
merci, mais ça marche pas :-(
C'est même pire en binaire il me met E2 82 AC ce qui ne correspond pas a ce que je veux mettre.
Petite Information, mon fichier doit être au format UTF8, ça doit pas poser de problème je pense.



YopyBob
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
29 août 2010 à 10:28
Bah pourquoi tu n'utilise pas la même méthode qu'au dessus ?
As-tu regardé l'aide de la classe UTF8Encoding ?

PS : dans la ligne suivante
MajArt.Write(Encoding.UTF8.GetBytes("1O" & StrDup(256 - 2, " ") & vbLf))
as-tu remarqué que tu as écris 1O (avec la lettre O) et pas le chiffre 10 - normal ?
0

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

Posez votre question
yopyBob Messages postés 4 Date d'inscription mardi 2 septembre 2003 Statut Membre Dernière intervention 29 août 2010
29 août 2010 à 10:46
la méthode au dessus ne fonctionne pas non plus.

j'ai essayé avec l'exemple dans la documentation sur la class UTF8Encoding, ça fonctionne pas non plus.
En fait je voudrai encoder sur un octet un valeur hexa de 80. et la conversion ne s'opère pas. J'avoue que je suis perdu, ça fait trois jours que je suis dessus !!GGrrrrr
Pour la première ligne c'est normal.


YopyBob
0
Profil bloqué
29 août 2010 à 13:30
Désolé pour ton pseudo
j'ai écrit yopiBob au lieu de yopyBoB

La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

GRENIER Alain
0
yopyBob Messages postés 4 Date d'inscription mardi 2 septembre 2003 Statut Membre Dernière intervention 29 août 2010
29 août 2010 à 21:16
Merci pour l'astuce ça fonctionne, ouf je vais pouvoir livrer dans les temps.
Merci encore
Y a pas de mal pour le pseudo, c'est pas commun non plus ;-)



YopyBob
0
Rejoignez-nous