当我在Python中打印这样的程序时:
x = b'francis'
输出为b'francis'
。如果字节在0
&{39}和1
中,为什么不将其打印出来?
答案 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以下的某个较低级别,所有都是字节,每个字节由位组成;但不正确地说字节"在" 0
和1
s - 就像说第二十三号和第三十三号是不正确的一样。十进制数字(或十六进制,八进制或二进制数字,或英文文本字符)。
符号0
和1
只是我们在屏幕上绘制的图片,用于表示这些位的状态 - 如果我们选择单独表示它们。有时,我们选择较大的分组,并为各种状态组合分配不同的符号。例如,我们可以将多个位解释为二进制的单个整数值;或者(使用Unicode)我们可以进一步将该数字解释为"代码点" (其中大多数是文本字符;一些是控制字符,或文本字符的一部分)。
Python bytes
对象是" raw"的包装器。字节序列。当你显示它时,Python使用一个表示,其中每个字节(8位的分组)对应于一个或多个符号:相应的整数值在32到126之间的字节(包括)(由于历史原因)使用单个文本字符(遵循所谓的ASCII编码)表示,而其他字符用四字符"转义序列表示"以\x
开头,后跟数字的十六进制表示。