为什么第一个字节打印为(b'c \ x ..)而不是(b'x63 \ x ..)?

时间:2018-11-04 14:31:46

标签: python arrays printing hex byte

我正在编写用于填充oracle攻击的程序,并且需要bytearrays, 但是如果我定义一个新的bytearray,则第一个字节0x63的打印方式会有所不同。

我必须按字节顺序XOR 2 bytearrays

test = bytearray( [99,203,00] )
print(test)
print(hex(99))

输出:

bytearray(b'c\xcb\x00')
0x63

这是我的第一个问题。感谢您的帮助!

f

1 个答案:

答案 0 :(得分:0)

对于字符串输出,python用chr(hexcode)字符替换可打印的十六进制代码以用于显示:

print('c', ord('c'),hex(ord('c')))   #  c 99 '0x63'

t = bytearray([99,203,0])
print(t)                             #  bytearray(b'c\xcb\x00')
print(t[0],t[1],t[2])                #  99 203 0

它们是等效的-但打印出来较短。您可以获得像这样的全十六进制表示形式:

t = bytearray([99,203,0])
t_hex = '\\'+'\\'.join( ( hex(i) for i in t) ) 

print(t_hex)

输出:

\0x63\0xcb\0x0