I have a ASCII string = "abcdefghijk". I want to write this to a binary file in binary format using python.
I tried following:
str = "abcdefghijk"
fp = file("test.bin", "wb")
hexStr = "".join( (("\\x%s") % (x.encode("hex"))) for x in str)
fp.write(hexStr)
fp.close()
However, when I open the test.bin I see the following in ascii format instead of binary.
\x61\x62\x63\x64\x65\x66\x67
I understand it because for two slashes here ("\\x%s"). How could I resolve this issue? Thanks in advance.
Update :
Following gives me the expected result:
file = open("test.bin", "wb")
file.write("\x61\x62\x63\x64\x65\x66\x67")
file.close()
But how do I achieve this with "abcdef" ASCII string. ?
You misunderstood what \xhh
does in Python strings. Using \x
notation in Python strings is just syntax to produce certain codepoints.
You can use '\x61'
to produce a string, or you can use 'a'
; both are just two ways of saying give me a string with a character with hexadecimal value 61, e.g. the a
ASCII character:
>>> '\x61'
'a'
>>> 'a'
'a'
>>> 'a' == '\x61'
True
The \xhh
syntax then, is not the value; there is no \
and no x
and no 6
and 1
character in the final result.
You should just write your string:
somestring = 'abcd'
with open("test.bin", "wb") as file:
file.write(somestring)
There is nothing magical about binary files; the only difference with a file opened in text mode is that a binary file will not automatically translate \n
newlines to the line separator standard for your platform; e.g. on Windows writing \n
produces \r\n
instead.
You certainly do not have to produce hexadecimal escapes to write binary data.
On Python 3 strings are Unicode data and cannot just be written to a file without encoding, but on Python the str
type is already encoded bytes. So on Python 3 you'd use:
somestring = 'abcd'
with open("test.bin", "wb") as file:
file.write(somestring.encode('ascii'))
or you'd use a byte string literal; b'abcd'
.
I think you don't necessarily understand what binary/ascii is ... all files are binary in the sense that its just bits. ascii is just a representation of some bits... 99.9999 % of file editors will display your bits as ascii if they can , and if there is no other encoding declared in the file itself ...
fp.write("abcd")
is exactly equivelent to
fp.write("\x61\x62\x63\x64")
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With