Python Byte不打印二进制文件

时间:2018-04-16 18:50:08

标签: python byte

当我在Python中打印这样的程序时:

x = b'francis'

输出为b'francis'。如果字节在0&{39}和1中,为什么不将其打印出来?

4 个答案:

答案 0 :(得分:1)

来自python docs

  

bytes和bytearray对象是整数序列(0到0之间)   255),表示单字节的ASCII值。

因此它们是表示ASCII值的整数序列。

对于conversion,您可以使用:

import sys
int.from_bytes(b'\x11', byteorder=sys.byteorder)  # => 17
bin(int.from_bytes(b'\x11', byteorder=sys.byteorder))  # => '0b10001'

答案 1 :(得分:0)

基本上,计算机上的所有内容最终都以0和1表示。 b符号的目的并不像你预期的那样。

我想向您推荐一个很好的答案,可以帮助您了解b-notation的用途以及如何正确使用它: What does the 'b' character do in front of a string literal?

祝你好运。

答案 2 :(得分:0)

有意设计bytes对象的工作方式如下:repr在可打印的ASCII范围内使用相应的ASCII字符作为字节,对于一些特殊的ASCII控制字符,使用众所周知的反斜杠转义符,和其他所有内容的十六进制反斜杠转义(而str只是repr)。

基本思想是bytes可以用作0-255的整数的不可变数组,但更常见的是它被用作在一些ASCII兼容的字符集中编码的不可变字符数组。

特别是,bytes最常见的用途之一是用于HTTP,SMTP和其他网络协议中的标头。这些头文件通常完全是纯ASCII格式,或者至少是纯ASCII密钥,其中一些值是纯ASCII的,另一些是ASCII兼容的字符集 - 你通常必须解析ASCII头文件以找出用于解码正文的字符集。能够看到这些标题是ASCII字符比将它们视为一系列数字更有用。

答案 3 :(得分:0)

你似乎以一种非常普遍的方式从根本上混淆了。数据本身是与表示不同的概念,即当您尝试print或以其他方式显示数据时所看到的内容。可能有多种方式来表示相同的数据。这就像我写23(十进制)或0x17(十六进制)或0o27(八进制)或0b10111(二进制)或twenty-three的方式(英文),我正在谈论相同的数字。

在Python以下的某个较低级别,所有都是字节,每个字节由位组成;但正确地说字节"在" 01 s - 就像说第二十三号和第三十三号是不正确的一样。十进制数字(或十六进制,八进制或二进制数字,或英文文本字符)。

符号01只是我们在屏幕上绘制的图片,用于表示这些位的状态 - 如果我们选择单独表示它们。有时,我们选择较大的分组,并为各种状态组合分配不同的符号。例如,我们可以将多个位解释为二进制的单个整数值;或者(使用Unicode)我们可以进一步将该数字解释为"代码点" (其中大多数是文本字符;一些是控制字符,或文本字符的一部分)。

Python bytes对象是" raw"的包装器。字节序列。当你显示它时,Python使用一个表示,其中每个字节(8位的分组)对应于一个或多个符号:相应的整数值在32到126之间的字节(包括)(由于历史原因)使用单个文本字符(遵循所谓的ASCII编码)表示,而其他字符用四字符"转义序列表示"以\x开头,后跟数字的十六进制表示。