WriteHexString
ldci27-Feb-2010/18:22:05+1:00
Qui aurait la bonne idée pour faire avec Rebol? J'ai oublié le basic...


Public Function WriteHexString(cHS As String, ByVal cFN As Long)

'Place une chaine hexadécimale dans le fichier

Dim I As Long
Dim C As String

For I = 1 To Len(cHS) Step 2
C = Mid$(cHS, I, 2)
Put #cFN, , Chr$(Val("&H" & C))
Next
End Function
ldci28-Feb-2010/19:35:29+1:00
Bon pas grand monde sur le forum ...
Voici la solution

WriteHexString: func [ str file][
   lg: to-integer length? str
   for i 1 lg 2 [a: pick str i b: pick str i + 1
    write/append file to-char to-integer to-issue join a b
   ]
]

L'astuce est dans l'utilisation de to-issue qui est un type Rebol très utile.
A +
guest23-Mar-2010/8:09:52+1:00
Heu normalement write/binary est suffisant.

>> write/binary %xxxx "azerty"
>> read/binary %xxxx
== #{617A65727479}
>> read %xxxx
== "azerty"
ldci3-Mar-2010/12:10:50+1:00
Salut Guest2
Tu as tout à fait raison. En fait j'avais besoin de passer des chaines du type str: "011500030000000100030000". En d'autre termes, elles sont déjà en binaire par conséquent un write/binary crée des valeurs qui sont traitées comme aberrantes quand on relit les octets par un read/binary
exemple >> #{303131353030303330303030303030313030303330303030}
alors que le programme de lecture attend en fait "011500030000000100030000" . (Voir le code de TiffLib.r).
Merci en tout cas pour l'astuce.
A +
guest23-Mar-2010/18:48:39+1:00
Ok j'ai compris ce que tu veux.
tu as une chaine "01020304" qui est déjà en représentation hexa.
donc tu veux obtenir:
#{01020304}

Pas besoin de boucle, le fonction debase est ton amie.
>> debase/base "010203" 16
== #{010203}
ldci4-Mar-2010/8:58:51+1:00
Salut Guest2
Tu es le meilleur! et Rebol est toujours aussi génial.

Login required to Post.


Powered by RebelBB and REBOL 2.7.8.4.2