Écrit une chaîne de caractères ASCII en binaire en python
J'ai une chaîne de caractères ASCII = "abcdefghijk". Je veux écrire cela dans un fichier binaire au format binaire à l'aide de python.
J'ai essayé suivantes:
str = "abcdefghijk"
fp = file("test.bin", "wb")
hexStr = "".join( (("\\x%s") % (x.encode("hex"))) for x in str)
fp.write(hexStr)
fp.close()
Cependant, lorsque j'ouvre le test.bin je vois les suivants au format ascii au lieu de binaire.
\x61\x62\x63\x64\x65\x66\x67
Je le comprends parce que pour les deux barres obliques ici ("\\x%s"). Comment pourrais-je résoudre ce problème? Merci à l'avance.
Mise à jour :
Suivant me donne le résultat attendu:
file = open("test.bin", "wb")
file.write("\x61\x62\x63\x64\x65\x66\x67")
file.close()
Mais comment puis-je réaliser cela avec "abcdef" chaîne de caractères ASCII. ?
Vous très soigneusement encodage des caractères hex - pourquoi attendez-vous à voir quelque chose d'autre?
Quelle sortie, vous attendiez-vous alors? Je ne suis pas sûr de comprendre ce que le mode binaire t, ou même ce que Python utilise
Je veux écrire "\x61\x62\x63\x64\x65\x66\x67" que les binaires de test.bin non pas en tant que chaîne de caractères ascii). Comment puis-je le faire? Et enfin le test.bin doit être un fichier binaire.
tous les fichiers sont binaires. L'ouverture d'un fichier en mode texte ne permet à un traitement spécial des retours à la ligne (et sur Windows, les causes 0x0a être interprété comme la fin du fichier). En tant que tel, il suffit d'écrire
Toutefois, un fichier binaire est pas une séquence de caractères hexadécimaux! Certains hex rédacteurs affichage contenu de l'hexagone, mais c'est juste represetation, et non pas la valeur réelle dans le fichier.
Quelle sortie, vous attendiez-vous alors? Je ne suis pas sûr de comprendre ce que le mode binaire t, ou même ce que Python utilise
\xhh
notation (et c'est juste syntaxe, un moyen de produire de la valeur, et non pas la valeur elle-même).Je veux écrire "\x61\x62\x63\x64\x65\x66\x67" que les binaires de test.bin non pas en tant que chaîne de caractères ascii). Comment puis-je le faire? Et enfin le test.bin doit être un fichier binaire.
tous les fichiers sont binaires. L'ouverture d'un fichier en mode texte ne permet à un traitement spécial des retours à la ligne (et sur Windows, les causes 0x0a être interprété comme la fin du fichier). En tant que tel, il suffit d'écrire
'abcd'
. Sur Python 3, vous devez encoder le texte d'octets avec str.encode('ascii')
.Toutefois, un fichier binaire est pas une séquence de caractères hexadécimaux! Certains hex rédacteurs affichage contenu de l'hexagone, mais c'est juste represetation, et non pas la valeur réelle dans le fichier.
OriginalL'auteur aMa | 2015-03-19
Vous devez vous connecter pour publier un commentaire.
Vous avez mal compris ce que
\xhh
n'en Python cordes. À l'aide de\x
notation en Python chaînes est juste la syntaxe à la production de certains codepoints.Vous pouvez utiliser
'\x61'
pour produire une chaîne de caractères, ou vous pouvez utiliser'a'
; les deux sont juste deux façons de dire me donner une chaîne de caractères avec un caractère à la valeur hexadécimale 61, par exemple, laa
de caractères ASCII:La
\xhh
syntaxe est alors pas la valeur; il n'y a pas de\
et pas dex
et pas de6
et1
de caractère dans le résultat final.Vous devriez il suffit d'écrire votre chaîne:
Il n'y a rien de magique à propos des fichiers binaires; la seule différence avec un fichier ouvert en mode texte n'est qu'un fichier binaire ne sera pas automatiquement traduire
\n
des sauts de ligne à la ligne séparateur standard pour votre plate-forme; par exemple, sur Windows écrit\n
produit\r\n
à la place.Vous avez certainement n'avez pas à produire de l'hexadécimal échappe à l'écriture des données binaires.
Sur Python 3 cordes sont données Unicode et ne peut pas être écrit dans un fichier sans codage, mais sur Python
str
type est déjà codé octets. Donc sur Python 3 vous pouvez utiliser:ou vous pouvez utiliser une chaîne d'octets littérale;
b'abcd'
.vous pouvez aller encore plus loin
'a' is '\x61'
vous ne pouvez pas. Le Disponible interprète de choisir à optimiser et à vous à la fin avec la même chaîne de l'objet (et puis
is
œuvres), mais c'est pas conseillé et vous ne devez jamais compter sur elle.ok juste point ... j'ai pensé à de simples caractères c'était peut-être ok... dans la coquille, il a travaillé tous les temps pour moi ... mais c'était juste un test (êtes-vous sûr, c'est n'est pas en sécurité avec les caractères unique dans l'unique plage d'octets (c'est à dire moins de 255)? comme de petits entiers?
voir à Propos de l'évolution de l'id d'un Python immuable string pour l'état actuel de la chaîne Python stage et objets constants; c'est un détail d'implémentation et ne doit jamais être invoqué.
OriginalL'auteur Martijn Pieters
Je pense que vous ne comprenez pas ce que binaire/ascii est ... tous les fichiers sont binaires dans le sens que son juste bits. ascii est juste une représentation de quelques morceaux... 99,9999% des éditeurs de fichiers permet d'afficher votre bits ascii s'ils le peuvent , et si il n'y a pas d'autre encodage déclaré dans le fichier lui-même ...
est exactement equivelent à
OriginalL'auteur Joran Beasley