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

yopyBob 4 Messages postés mardi 2 septembre 2003Date d'inscription 29 août 2010 Dernière intervention - 29 août 2010 à 09:45 - Dernière réponse : yopyBob 4 Messages postés mardi 2 septembre 2003Date d'inscription 29 août 2010 Dernière intervention
- 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
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
cs_Galain 1270 Messages postés mardi 11 novembre 2003Date d'inscription 24 juillet 2013 Dernière intervention - 29 août 2010 à 13:28
3
Merci
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

Merci cs_Galain 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de cs_Galain
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 29 août 2010 à 10:03
0
Merci
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)
Commenter la réponse de cs_Jack
yopyBob 4 Messages postés mardi 2 septembre 2003Date d'inscription 29 août 2010 Dernière intervention - 29 août 2010 à 10:08
0
Merci
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
Commenter la réponse de yopyBob
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 29 août 2010 à 10:28
0
Merci
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 ?
Commenter la réponse de cs_Jack
yopyBob 4 Messages postés mardi 2 septembre 2003Date d'inscription 29 août 2010 Dernière intervention - 29 août 2010 à 10:46
0
Merci
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
Commenter la réponse de yopyBob
cs_Galain 1270 Messages postés mardi 11 novembre 2003Date d'inscription 24 juillet 2013 Dernière intervention - 29 août 2010 à 13:30
0
Merci
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
Commenter la réponse de cs_Galain
yopyBob 4 Messages postés mardi 2 septembre 2003Date d'inscription 29 août 2010 Dernière intervention - 29 août 2010 à 21:16
0
Merci
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
Commenter la réponse de yopyBob

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.