Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

migration de G5 vers Xeon

4 réponses
Avatar
Bruno Causse
bonsoir,

j'ai plusieurs fichiers binaires de données a transferer.

des fichier int (32 bits)
short (16 bits)
float (32 bits)

quelle est la bonne solution?
--
Bruno Causse

4 réponses

Avatar
Eric Levenez
Le 01/09/08 18:38, dans <48bc1a78$0$26944$, « Bruno
Causse » a écrit :

j'ai plusieurs fichiers binaires de données a transferer.

des fichier int (32 bits)
short (16 bits)
float (32 bits)

quelle est la bonne solution?



Perl.

Si ton fichier n'est constitué que de int, ou que de short ou que de float,
il suffit d'inverser par 2 ou par 4 octets. Si ton fichier contient des
structures binaires, il faut connaître la structure, ce qui pourrait prendre
plus d'une ligne de code.

--
Éric Lévénez -- <http://www.levenez.com/>
Unix is not only an OS, it's a way of life.
Avatar
Bruno Causse
"Eric Levenez" a écrit dans le message de news:
C4E1E90A.D75AB%
Le 01/09/08 18:38, dans <48bc1a78$0$26944$, « Bruno
Si ton fichier n'est constitué que de int, ou que de short ou que de
float,
il suffit d'inverser par 2 ou par 4 octets. Si ton fichier contient des
structures binaires, il faut connaître la structure, ce qui pourrait
prendre
plus d'une ligne de code.




c'est aussi simple que cela, merci,

je recois les Xeons demain.
Avatar
Eric Levenez
Le 01/09/08 19:04, dans <48bc20b1$0$17483$, « Bruno
Causse » a écrit :

"Eric Levenez" a écrit dans le message de news:
C4E1E90A.D75AB%
Le 01/09/08 18:38, dans <48bc1a78$0$26944$, « Bruno
Si ton fichier n'est constitué que de int, ou que de short ou que de
float,
il suffit d'inverser par 2 ou par 4 octets. Si ton fichier contient des
structures binaires, il faut connaître la structure, ce qui pourrait
prendre
plus d'une ligne de code.



c'est aussi simple que cela, merci,



En perl, quand on a la commande qui va bien, c'est simple de faire un
couper/coller pour l'exécuter. Par contre, faire la commande dont je te
parles (avec pack/unpack) du premier coup et en une ligne, c'est plus
compliqué.

Pour faire une inversion de 2 octets (donc pour un fichier composé que de 16
bits), le plus simple est :

dd conv=swab < in > out

Ce qui est bête, c'est que dd n'a pas d'option pour 4 octets.

--
Éric Lévénez -- <http://www.levenez.com/>
Unix is not only an OS, it's a way of life.
Avatar
Eric Levenez
Le 01/09/08 19:21, dans <C4E1F12D.D75BD%, « Eric
Levenez » a écrit :

En perl, quand on a la commande qui va bien, c'est simple de faire un
couper/coller pour l'exécuter. Par contre, faire la commande dont je te
parles (avec pack/unpack) du premier coup et en une ligne, c'est plus
compliqué.



En y réfléchissant pour inverser 32 bits, je ferais cela :

perl -e "while (read(STDIN, $d, 4)) { print pack('N', unpack('V',
$d)); }" < in > out

Ce n'est pas joli, et sans doute pas rapide. Un Perlien ferait mieux.

--
Éric Lévénez -- <http://www.levenez.com/>
Unix is not only an OS, it's a way of life.