Valeur hexa dans fichier incohérente [Résolu]

Signaler
Messages postés
4
Date d'inscription
mardi 2 septembre 2003
Statut
Membre
Dernière intervention
29 août 2010
-
Messages postés
4
Date d'inscription
mardi 2 septembre 2003
Statut
Membre
Dernière intervention
29 août 2010
-
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

Messages postés
1263
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
24 juillet 2013
6
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
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
75
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)
Messages postés
4
Date d'inscription
mardi 2 septembre 2003
Statut
Membre
Dernière intervention
29 août 2010

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
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
75
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 ?
Messages postés
4
Date d'inscription
mardi 2 septembre 2003
Statut
Membre
Dernière intervention
29 août 2010

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
Messages postés
1263
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
24 juillet 2013
6
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
Messages postés
4
Date d'inscription
mardi 2 septembre 2003
Statut
Membre
Dernière intervention
29 août 2010

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