L'écriture d'un fichier binaire en shell (shell, awk)
Mon problème est que j'ai besoin de créer un fichier avec ce exact d'octets: 48, 00, 49, 00
Je ne peux pas utiliser C (puisque je ne peut pas déployer n'importe quoi, n'perl, aucun autre langage de script. J'ai essayé cette utilisation de awk, et en bureau il fonctionne:
diego@diego-linux:~# awk 'BEGIN{ printf "%c%c%c%c", 48, 00, 49, 00 }' | hexdump
0000000 0030 0031
0000004
Cependant la plate-forme cible est en cours d'exécution busybox v1.13.2 et ce code ne fonctionne pas. L'awk version il n'a pas de sortie ascii "0" (toutes les autres valeurs sont ok).
Quelles sont vos recommandations?
OriginalL'auteur elcuco | 2011-04-07
Vous devez vous connecter pour publier un commentaire.
vous pouvez utiliser la commande suivante:
OriginalL'auteur
POSIX AWK standard dit que l'adoption d'un 0 à AWK printf avec %c format peut entraîner une quelconque comportement. Cependant... POSIX echo est également très limitée, et si octal et hexadécimal prescripteurs (et -n) fonctionne sur GNU echo et intégrée à BASH... Ils peuvent ne pas fonctionner partout. Afin de maximiser les chances que vous obtenez des gestes cohérents sur tous les systèmes POSIX, il est préférable d'utiliser la ligne de commande shell printf que l'un de ces.
Ce qui semble étrange pour moi si... Vous pourriez être désireux de sortie 0x48, 0x00, 0x49, 0x00-qui ressemble à un joli numéro de pilote en octal:
OriginalL'auteur
vous pouvez essayer de l'echo, qui permet également arbitraire de caractères ascii (ces nombres sont des nombres octaux).
pas d'écho, juste à accepte le nombre octal. Mais vous avez demandé une particulière en raison de hex séquence (et j'ai même traduit en octals pour vous). Si vous ne savez pas comment convertir recherchez un autre hex de séquence dans la page de man de l'ascii. Il vous donnera une table avec décimal, hexadécimal et octal ;-).
juste pour référence future qu'elle accepte, hex. suffit d'utiliser \\xNN où N est un nombre hexadécimal.
OriginalL'auteur
J'avais besoin d'écrire des fichiers binaires à partir hex à l'aide de busybox dans un vieux Android shell. Cette
printf
avec une redirection travaillé dans mon cas d'utilisation.Écrire les données binaires dans hex:
Afficher le résultat en hexadécimal:
Afficher le résultat dans un format ascii:
dd
? Pourquoi ne pasbusybox printf '\x74\x65\x73\x74' > /sdcard/test.txt
travail?Wow, vous avez raison! J'étais certain que j'ai essayé. Je l'ai fait essayer toutes ces réponses et une douzaine d'autres qui ont tous échoué. C'est aussi simple que cela. Il doit y avoir eu une autre variable dans le mélange. Je vais revoir ma réponse. Merci!
OriginalL'auteur
Je ne sais pas ce qui est dans busybox, mais cela peut fonctionner car printf est plus petit que awk.
C'est la sortie:
Donc, si vous remplacez 1 avec H et I, vous obtenez les valeurs 0x48, 0x49 vous voulez - au lieu de la virgule 48/49 (à l'aide de 0 et de 1). La problématique de la partie est d'arriver à zéro octets de ne pas mettre fin à la production. Le ci-dessus se traduit alors par
printf "%c%c%c%c" 72 0 73 0 | hexdump
pour la sortie 0x48 0x00 0x49 0x00.OriginalL'auteur