Inverser octets tous les 2 n [Divers] - Divers - Programmation
Marsh Posté le 13-08-2010 à 20:22:01
C'est pas trop autorisé par la charte ta requête, mais bon je suis de bonne humeur donc voilà un petit code en C qui devrait marcher correctement, je l'ai pas plus testé que ça mais ça a l'air de pas planter donc on va pas se plaindre
Code :
|
Si tu traites de gros fichiers, hésites pas a changer le # define BUF_SIZE 512 par un truc beaucoup plus gros genre # define BUF_SIZE 1048576, ça bourrinera moins le disque dur et tu gagneras en rapidité
Marsh Posté le 13-08-2010 à 21:44:49
Code :
|
Marsh Posté le 13-08-2010 à 21:58:12
Funky ^^
j'ai voulu compiler sous linux, et j'ai lu l'histoire d'un mec qui disait que sa belle soeur par alliance de son oncle lui avait dit que O_BINARY n'était pas nécessaire sous système linux because pas de distingo entre text et binaire .. en plus ça compilait pas .. bref
testé sans O_BINARY ... fichier entrée = 2mo fichier sortie 4go ^^
Je télécharge de ce pas la trial de vs2010 ^^
Marsh Posté le 13-08-2010 à 22:04:01
regexp42 a écrit :
|
Perl fonctionne en binaire ou octal ? je doute (mais je peux me tromper of course)
Marsh Posté le 13-08-2010 à 23:00:09
Y'a sûrement moyen de faire fonctionner perl pour manipuler directement les octets de ton fichier
O_BINARY je l'ai mis par sécurité histoire qu'il fasse pas du khakha mais en général ouais c'est pas utile
Marsh Posté le 14-08-2010 à 01:25:04
yoplait21 a écrit : |
Essaye ça alors :
Code :
|
Marsh Posté le 14-08-2010 à 08:12:07
Merci mais rien ne s'affiche et aucune modification sur le fichier d'entrée ( je n'ai pas spécifié de sortie mais vu la commande il doit s'écraser sur l'entrée non ? )
Marsh Posté le 14-08-2010 à 09:49:57
Tu veux juste swapper les octets deux par deux? si tu es sous linux, dd est prévu pour cela:
dd if=inputfile of=outputfile conv=swab
A+,
Marsh Posté le 14-08-2010 à 10:23:15
yoplait21 a écrit : Merci mais rien ne s'affiche et aucune modification sur le fichier d'entrée ( je n'ai pas spécifié de sortie mais vu la commande il doit s'écraser sur l'entrée non ? ) |
Non il "affiche" sur stdout, et comme c'est du binaire il vaut mieux rediriger ça dans un fichier. Ca fonctionne chez moi :
Citation : $> hexdump file.bin |
Marsh Posté le 14-08-2010 à 11:21:39
Euh, tu es sur que ton code perl fonctionne encore si tu as des \n dans ton binaire?
En plus, à lire ton expression régulière, ça peut pas marcher du tout
/([^ \n]+) ([^ \n]+)/ ça va matcher sur texte composé de deux caractères séparés par du blanc, mais certainement pas le binaire voulu (ou il y a pas de blancs, etc).
Un petit test pour s'en convaincre:
Code :
|
En sortie, on a la même chose qu'en entrée, rien n'a été swappé des 4 octets successifs de valeur 1 2 3 et 4.
A la limite, tu aurais écrit s/(.)(.)/$2$1/g, ça aurait pu fonctionner (a la coupure de fin de ligne pour une ligne de longueur impaire près).
Il y a des techniques en perl pour faire ce type de conversion, mais elles reposent plutôt sur pack/unpack, et une lecture qui ne se fait pas ligne à ligne (contrairement à ce que fait ici le my $v = <STDIN> )
A+,
Marsh Posté le 14-08-2010 à 13:25:13
gilou a écrit : Euh, tu es sur que ton code perl fonctionne encore si tu as des \n dans ton binaire? |
Oui j'me suis vautré dans mon copier coller, c'est plutôt "s/(.)(.)/$2$1/g" la regex.
Marsh Posté le 13-08-2010 à 19:36:33
Bonsoir à tous.
Voila, je ne connais strictement rien en dev aussi merci de me fusiller sur place ou bien de m'aider un poil ^^
Voici ce que je souhaiterai obtenir, et ce, avec un langage ou un outil tout prêt (ouais je rêve) accessible pour un gogol comme moi.
Je possède un fichier binaire qui doit au final ressembler à cela :
Source:
bb 1b 53 c4 bc 11 45 c4 11 11 c3 bc 11 b1 1c 11
Destination:
1b bb c4 53 11 bc c4 45 11 11 bc c3 b1 11 11 1c
Grosso modo, j'ai besoin de swapper 2 octets entre eux tous les 2 octets ... pas clair ? .. normal je pige pas grand chose ^^
Aussi si quelqu'un pouvait avoir la bonté de me répondre sans me proposer d'aller jouer dans le mixer ce serait fun.
Message édité par yoplait21 le 13-08-2010 à 19:36:48