我尝试读取以十六进制编写的字节文件,例如:(909090) 在汇编中是 nop nop nop,我想将每两个数字作为一个字节与 0x91 异或。
如何打印十六进制值?现在它只打印没有意义的数字。
一般来说,我想为我的汇编代码构建一个打包器。
def add_prefix(a):
a = str(a)
a = '0x' + a
a = int(a, 16)
return a
fr = open('C:\code.txt', 'r')
word = ''
b = ''
for line in fr:
b += line
count = 0
for char in b:
char = str(char)
word += char
if count%2 == 0:
word = int(str(add_prefix(word)^91), 16)
print word
word = ""
请您参考如下方法:
所需的算法非常简单:
- 一次读两个字
- 将这些转换为整数
- 将整数与掩码 (
0x91) 异或 - 将整数转换回十六进制字符串(前导零)
with open(file_path, 'r') as fp:
result = []
while True:
# 1.
s = fp.read(2)
if not s:
break
# 2.
number = int(s, 16) # No need for '0x' prefix!
# 3.
number = number ^ 0x91 # '91' needs '0x' prefix!
# 4.
result.append(format(number, '02x'))
print ''.join(result)
