1

我有一个问题,我很难理解代码的样子,所以我会尽我所能解释。我正在尝试查看和搜索 NUL 字节并将其替换为另一个 NUL 类型的字节,但计算机需要能够区分不同的 NUL 字节。例如,十六进制代码 00 等于 NUL,十六进制代码 01 等于 SOH。假设我想创建代码来相互替换它们。代码示例

TextFile1 = Line.Replace('NUL','SOH')
TextFile2.write(TextFile1)

是的,我已经阅读了很多不同的帖子,只是试图理解将其放入工作代码中。第一个问题是我不能将十六进制 00 的输出复制并粘贴到它不会粘贴的 python 模块中。阅读显示 0x00 类型格式用于表示,但我在为 python 3.x 找到正确表示时遇到问题

打印 (\x00)
output = nothing shows #I'm trying to get output of 'NUL' or as hex will show '.' 要么工作正常——编辑

那么如何让模块理解我正在尝试表示 HEX 00 或“NUL”并表示为“。” 并为 SOH 做同样的事情,不仅限于这些类型的 NUL 字符,而且只是将它们用作示例,因为我想使用所有 256 个 HEX 字符。但能够像十六进制编辑器那样在粘贴到另一个程序时分辨出区别。也许我需要让这两个程序使用相同的编码类型并不确定。我只需要一个非常简单的示例文本,作为我将如何搜索和替换不可表示的十六进制字符并在记事本或记事本++中查找和替换它们的方式,根据我的阅读,只有记事本++有能力这样做。

4

2 回答 2

2

如果您使用的是 Python 3,那么您应该真正使用bytes对象。Python 3 字符串是 unicode 代码点的序列。要使用字节字符串,请使用bytes(这与使用“字节序列”模型的 Python 2 字符串几乎相同)。

>>> bytes([97, 98, 99])
b'abc'
>>>

请注意,要编写bytes文字,b请在字符串的开始引号之前添加 a。

要回答您的问题,请查找表示0x000x01查看:

>>> bytes([0x00, 0x01])
b'\x00\x01'

注意,0x00并且0是相同的类型,它们只是不同的文字语法(十六进制文字与十进制文字)。

>>> bytes([0, 1])
b'\x00\x01'

我不知道你对 Notepad++ 是什么意思。

不过,这是一个用其他内容替换空字节的示例:

>>> byte_string = bytes([97, 98, 0, 99])
>>> byte_string
b'ab\x00c'
>>> print(byte_string)
b'ab\x00c'
>>> byte_string.replace(b'\x00', b'NONE')
b'abNONEc'
>>> print(byte_string.replace(b'\x00', b'NONE'))
b'abNONEc'
于 2017-03-11T20:40:37.263 回答
0

\x00在python中获得价值的另一种等效方法是chr(0)我喜欢这种方式比文字版本好一点

于 2019-10-17T22:40:06.370 回答