python 操纵单个数据位
python manipulating single bits of data
我正在尝试以二进制模式打开一个文件,以便我可以在位级别对其进行操作。
我正在尝试通过以下方式获取二进制信息:
with open('file.txt', 'rb') as f:
data = f.read()
但是当我尝试打印出来时,我得到了十六进制和一些奇怪的(对我来说)字符的混合物,如下所示
...~\xeb\xdd{\xdf\xba\xf7^\xf7\xee\xbd\xd7\...
如何获取 0 和 1 的二进制信息并能够将 0110 1001 更改为 1001 0110
二进制数据就是数字。更重要的是,Python 对待 boolean
或 byte
的方式几乎与 int
相同。使用 BytesIO
将让您以数字流的形式访问文件,每个数字代表一个字节。
要输入以 2 为基数的数字,请使用 0b00000000
语法。要以相同的方式查看数字,请使用 "{:08b}".format(number)
。要将 0b01101001
更改为 0b10010110
,请使用 ~0b01101001 & 0xFF
。 ~
运算符翻转位,而 & 0xFF
只是一个掩码,用于将 int
中剩余的 24 位归零。 (这是必要的,因为我们翻转了所有 32 位,所有前导的 0 现在都是 1,我们根本不希望这样)。
我正在尝试以二进制模式打开一个文件,以便我可以在位级别对其进行操作。
我正在尝试通过以下方式获取二进制信息:
with open('file.txt', 'rb') as f:
data = f.read()
但是当我尝试打印出来时,我得到了十六进制和一些奇怪的(对我来说)字符的混合物,如下所示
...~\xeb\xdd{\xdf\xba\xf7^\xf7\xee\xbd\xd7\...
如何获取 0 和 1 的二进制信息并能够将 0110 1001 更改为 1001 0110
二进制数据就是数字。更重要的是,Python 对待 boolean
或 byte
的方式几乎与 int
相同。使用 BytesIO
将让您以数字流的形式访问文件,每个数字代表一个字节。
要输入以 2 为基数的数字,请使用 0b00000000
语法。要以相同的方式查看数字,请使用 "{:08b}".format(number)
。要将 0b01101001
更改为 0b10010110
,请使用 ~0b01101001 & 0xFF
。 ~
运算符翻转位,而 & 0xFF
只是一个掩码,用于将 int
中剩余的 24 位归零。 (这是必要的,因为我们翻转了所有 32 位,所有前导的 0 现在都是 1,我们根本不希望这样)。