我想查看当前目录中文件的内容,但从命令行以二进制格式查看。我怎样才能做到这一点呢?

如何用Python文字将整数表示为二进制数?

我很容易就找到了hex的答案:

>>> 0x12AF
4783
>>> 0x100
256

和八进制:

>>> 01267
695
>>> 0100
64

在Python中如何使用文字来表示二进制?


回答摘要

Python 2.5及更早版本:可以使用int('01010101111',2)表示二进制,但不能使用字面量。 Python 2.5及更早版本:无法表示二进制字面值。 Python 2.6 beta:你可以这样做:0b1100111或0b1100111。 Python 2.6 beta:也将允许0o27或0o27(第二个字符是字母O)表示八进制。 Python 3.0 beta版:与2.6版相同,但不再允许八进制使用旧的027语法。

例如,我有一个这样的字符串(subprocess.check_output的返回值):

>>> b'a string'
b'a string'

不管我对它做了什么,它总是在字符串前打印出烦人的b':

>>> print(b'a string')
b'a string'
>>> print(str(b'a string'))
b'a string'

有人知道如何将它作为普通字符串使用或转换成普通字符串吗?

维基百科上说

当需要对二进制数据进行编码时,通常使用Base64编码方案,这些数据需要通过设计用于处理文本数据的媒体存储和传输。这是为了确保数据在传输过程中保持完整而不被修改。

但是,数据不总是以二进制存储/传输吗?因为我们机器的内存存储二进制,这只是取决于你如何解释它?因此,无论您将位模式010011010110000101101110编码为ASCII中的Man还是Base64中的TWFu,最终都将存储相同的位模式。

如果最终的编码是用0和1表示的,并且每台机器和媒体都可以处理它们,那么数据是用ASCII还是Base64表示有什么关系呢?

“设计用于处理文本数据的媒体”是什么意思?他们可以处理二进制=>他们可以处理任何东西。


谢谢大家,我想我现在明白了。

当我们发送数据时,我们不能确定数据将以与我们预期的相同格式进行解释。因此,我们发送以双方都能理解的某种格式(如Base64)编码的数据。这样,即使发送方和接收方对相同内容的解释不同,但由于他们对编码格式达成一致,数据也不会被错误地解释。

来自Mark Byers的例子

如果我想发送

Hello
world!

一种方法是用ASCII码发送

72 101 108 108 111 10 119 111 114 108 100 33

但是字节10在另一端可能不能被正确地解释为换行符。因此,我们使用ASCII的一个子集来像这样编码

83 71 86 115 98 71 56 115 67 110 100 118 99 109 120 107 73 61 61

以传输相同数量信息的更多数据为代价,确保接收者能够以预期的方式解码数据,即使接收者对其余字符集有不同的解释。

在Python中,我如何在二进制文件中读取并循环该文件的每个字节?

我在上一门计算机系统课程,在某种程度上,我一直在为“二的补充”而挣扎。我想了解它,但我所读到的一切并没有让我明白它的含义。我读过维基百科的文章和其他各种文章,包括我的课本。

什么是2的补数,我们如何使用它,它如何在强制转换(从有符号到无符号,反之亦然)、逐位操作和位移位操作等操作中影响数字?

在Python中有任何罐装的Python方法将整数(或长)转换为二进制字符串吗?

谷歌上有无数的dec2bin()函数…但我希望我可以使用内置函数/库。

代表数字7的8位像这样:

00000111

设置了三个比特。

确定32位整数中设置位数的算法是什么?

显然,以下是有效的语法:

b'The string'

我想知道:

字符串前面的b是什么意思? 使用它的效果是什么? 在什么情况下使用它比较合适?

我在SO上找到了一个相关的问题,但这个问题是关于PHP的,它指出b是用来表示字符串是二进制的,而不是Unicode,这是需要代码从PHP < 6版本兼容,当迁移到PHP 6时。我不认为这适用于Python。

我确实在Python网站上找到了这个文档,是关于使用u字符以相同的语法指定字符串作为Unicode的。不幸的是,该文档中没有任何地方提到b字符。

另外,出于好奇,除了b和u还有别的符号吗?