hxStr = []
for x in range(256):
hxStr.append('{:02X}'.format(x))
ascChr = []
for i in range(32, 128):
ascChr.append(chr(i))
data = [
0xBE, 0xEF, 0xDE, 0xAD
]
lines = (len(data)//16)
if len(data)%16 != 0:
lines += 1
i = 0
pr = ''
for x in range(lines):
pr += "{:000000008X}{:1}|{:1}".format(x*16,'','')
btes = []
symbs = []
for y in range(i,i+16,1):
if y >= len(data):
for x in range((lines*16)-y):
symbs.append(' ')
btes.append(' ')
break
if chr(data[y]) in ascChr:
symbs.append(chr(data[y]))
else:
symbs.append('∙')
btes.append(hxStr[data[y]])
i = y+1
for y in range(len(btes)):
pr += "{:3}".format(btes[y])
pr += '|{:1}'.format('')
for y in range(len(symbs)):
pr += "{:1}".format(symbs[y])
pr += '\r\n'
print("{:9}|{:1}0{:2}1{:2}2{:2}3{:2}4{:2}5{:2}6{:2}7{:2}8{:2}9{:2}A{:2}B{:2}C{:2}D{:2}E{:2}F{:2}|\
{:1}0123456789ABCDEF".format('Offset','','','','','','','','','','','','','','','','','','',''))
print(pr)
aHhTdHIgPSBbXQpmb3IgeCBpbiByYW5nZSgyNTYpOgogICAgaHhTdHIuYXBwZW5kKCd7OjAyWH0nLmZvcm1hdCh4KSkKYXNjQ2hyID0gW10KZm9yIGkgaW4gcmFuZ2UoMzIsIDEyOCk6CiAgICBhc2NDaHIuYXBwZW5kKGNocihpKSkKZGF0YSA9IFsKICAgIDB4QkUsIDB4RUYsIDB4REUsIDB4QUQKXQpsaW5lcyA9IChsZW4oZGF0YSkvLzE2KQppZiBsZW4oZGF0YSklMTYgIT0gMDoKICAgIGxpbmVzICs9IDEKaSA9IDAKcHIgPSAnJwpmb3IgeCBpbiByYW5nZShsaW5lcyk6CiAgICBwciArPSAiezowMDAwMDAwMDhYfXs6MX18ezoxfSIuZm9ybWF0KHgqMTYsJycsJycpCiAgICBidGVzID0gW10KICAgIHN5bWJzID0gW10KICAgIGZvciB5IGluIHJhbmdlKGksaSsxNiwxKToKICAgICAgICBpZiB5ID49IGxlbihkYXRhKToKICAgICAgICAgICAgZm9yIHggaW4gcmFuZ2UoKGxpbmVzKjE2KS15KToKICAgICAgICAgICAgICAgIHN5bWJzLmFwcGVuZCgnICcpCiAgICAgICAgICAgICAgICBidGVzLmFwcGVuZCgnICcpCiAgICAgICAgICAgIGJyZWFrCiAgICAgICAgaWYgY2hyKGRhdGFbeV0pIGluIGFzY0NocjoKICAgICAgICAgICAgc3ltYnMuYXBwZW5kKGNocihkYXRhW3ldKSkKICAgICAgICBlbHNlOgogICAgICAgICAgICBzeW1icy5hcHBlbmQoJ+KImScpCiAgICAgICAgYnRlcy5hcHBlbmQoaHhTdHJbZGF0YVt5XV0pCiAgICBpID0geSsxCiAgICBmb3IgeSBpbiByYW5nZShsZW4oYnRlcykpOgogICAgICAgIHByICs9ICJ7OjN9Ii5mb3JtYXQoYnRlc1t5XSkKICAgIHByICs9ICd8ezoxfScuZm9ybWF0KCcnKSAgICAKICAgIGZvciB5IGluIHJhbmdlKGxlbihzeW1icykpOgogICAgICAgIHByICs9ICJ7OjF9Ii5mb3JtYXQoc3ltYnNbeV0pCiAgICBwciArPSAnXHJcbicgICAgCnByaW50KCJ7Ojl9fHs6MX0wezoyfTF7OjJ9Mns6Mn0zezoyfTR7OjJ9NXs6Mn02ezoyfTd7OjJ9OHs6Mn05ezoyfUF7OjJ9Qns6Mn1DezoyfUR7OjJ9RXs6Mn1GezoyfXxcCns6MX0wMTIzNDU2Nzg5QUJDREVGIi5mb3JtYXQoJ09mZnNldCcsJycsJycsJycsJycsJycsJycsJycsJycsJycsJycsJycsJycsJycsJycsJycsJycsJycsJycsJycpKSAgICAKcHJpbnQocHIp