我有一个问题,我很难理解代码的样子,所以我会尽力解释。我试图查看和搜索NUL字节并将其替换为另一个NUL类型字节,但计算机需要能够区分不同的NUL字节。例如,十六进制代码00等于NUL,十六进制代码01等于SOH。假设我想创建代码来替换彼此。代码示例
TextFile1 = Line.Replace('NUL','SOH') TextFile2.write(TextFile1)
是的,我已经阅读了很多不同的帖子,只是试图理解将它放入工作代码中。第一个问题是我不能只将hex 00的输出复制并粘贴到它不会粘贴的python模块中。读取显示0x00类型格式用于表示,但我有问题找到python 3.x的正确表示
Print (\x00) output = nothing shows #I'm trying to get output of 'NUL' or as hex would show '.' either works fine --Edited
所以如何让模块理解我正在尝试表示HEX 00或'NUL'并表示为'。'并为SOH做同样的事情,不仅限于那些类型的NUL字符,而只是使用那些作为例子,因为我想使用所有256个HEX字符。但是,当像十六进制编辑器那样粘贴到另一个程序时,可以分辨出区别。也许我需要让相同编码类型的两个程序不确定。我只需要一个非常简单的示例文本,我将如何搜索和替换没有可表示的十六进制字符,并在记事本或记事本++中查找和替换它们,从我读过的内容来看,只有记事本++才有能力这样做。
答案 0 :(得分:2)
如果您使用的是Python 3,则应该使用bytes
个对象。 Python 3字符串是unicode代码点的序列。要使用字节字符串,请使用bytes
(这与使用“字节序列”模型的Python 2字符串几乎相同)。
>>> bytes([97, 98, 99])
b'abc'
>>>
注意,要编写bytes
字面值,请在字符串中的开头引号之前添加b
。
要回答您的问题,请查看0x00
和0x01
的代表,请看:
>>> 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'
答案 1 :(得分:0)
在python中获取\x00
的值的另一种等效方法是chr(0)
,我喜欢这样,比文字版本好一点