在python中以二进制形式编写ASCII字符串

发布于 2021-01-29 16:53:09

我有一个ASCII字符串=“ abcdefghijk”。我想使用python将其写入二进制格式的二进制文件中。

我尝试了以下操作:

str  = "abcdefghijk"
fp = file("test.bin", "wb")
hexStr = "".join( (("\\x%s") % (x.encode("hex"))) for x in str)
fp.write(hexStr)
fp.close()

但是,当我打开test.bin时,我看到的是ascii格式而不是二进制格式的内容。

\x61\x62\x63\x64\x65\x66\x67

我了解这是因为这里有两个斜杠(“ \\ x%s”)。我该如何解决这个问题?提前致谢。

更新:

以下给了我预期的结果:

file = open("test.bin", "wb")
file.write("\x61\x62\x63\x64\x65\x66\x67")
file.close()

但是,如何使用“ abcdef” ASCII字符串实现此目的。?

关注者
0
被浏览
46
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您误解了\xhhPython字符串中的功能。\x在Python字符串中使用表示法 只是 产生某些代码点的 语法

    您可以使用'\x61'产生一个字符串,也可以使用'a'; 两种方式都只是 给我一个带有十六进制值61的字符的字符串,例如aASCII字符

    >>> '\x61'
    'a'
    >>> 'a'
    'a'
    >>> 'a' == '\x61'
    True
    

    \xhh随后的语法,是 不是值 ; 最终结果中没有\,没有x,没有61性格。

    您应该 只写您的字符串

    somestring = 'abcd'
    
    with open("test.bin", "wb") as file:
        file.write(somestring)
    

    二进制文件没有什么不可思议的。以文本模式打开的文件的唯一区别是二进制文件不会自动将\n换行符转换为平台的行分隔符标准;例如,在Windows上编写\n产生\r\n

    您当然不必产生十六进制转义来写入二进制数据。

    在Python 3上,字符串是Unicode数据,不能不经过编码就不能直接写入文件,但是在Python上,str类型 已经
    是编码字节。因此,在Python 3上,您将使用:

    somestring = 'abcd'
    
    with open("test.bin", "wb") as file:
        file.write(somestring.encode('ascii'))
    

    或者您将使用字节字符串文字;b'abcd'



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看