xref: /aosp_15_r20/external/capstone/bindings/python/xprint.py (revision 9a0e4156d50a75a99ec4f1653a0e9602a5d45c18)
1*9a0e4156SSadaf Ebrahimi#!/usr/bin/env python
2*9a0e4156SSadaf Ebrahimi# Capstone Python bindings, by Nguyen Anh Quynnh <[email protected]>
3*9a0e4156SSadaf Ebrahimi
4*9a0e4156SSadaf Ebrahimifrom __future__ import print_function
5*9a0e4156SSadaf Ebrahimiimport sys
6*9a0e4156SSadaf Ebrahimi_python3 = sys.version_info.major == 3
7*9a0e4156SSadaf Ebrahimi
8*9a0e4156SSadaf Ebrahimi
9*9a0e4156SSadaf Ebrahimidef to_hex(s, prefix_0x = True):
10*9a0e4156SSadaf Ebrahimi    if _python3:
11*9a0e4156SSadaf Ebrahimi        if prefix_0x:
12*9a0e4156SSadaf Ebrahimi            return " ".join("0x{0:02x}".format(c) for c in s)  # <-- Python 3 is OK
13*9a0e4156SSadaf Ebrahimi        else:
14*9a0e4156SSadaf Ebrahimi            return " ".join("{0:02x}".format(c) for c in s)  # <-- Python 3 is OK
15*9a0e4156SSadaf Ebrahimi    else:
16*9a0e4156SSadaf Ebrahimi        if prefix_0x:
17*9a0e4156SSadaf Ebrahimi            return " ".join("0x{0:02x}".format(ord(c)) for c in s)
18*9a0e4156SSadaf Ebrahimi        else:
19*9a0e4156SSadaf Ebrahimi            return " ".join("{0:02x}".format(ord(c)) for c in s)
20*9a0e4156SSadaf Ebrahimi
21*9a0e4156SSadaf Ebrahimidef to_hex2(s):
22*9a0e4156SSadaf Ebrahimi    if _python3:
23*9a0e4156SSadaf Ebrahimi        r = "".join("{0:02x}".format(c) for c in s)  # <-- Python 3 is OK
24*9a0e4156SSadaf Ebrahimi    else:
25*9a0e4156SSadaf Ebrahimi        r = "".join("{0:02x}".format(ord(c)) for c in s)
26*9a0e4156SSadaf Ebrahimi    while r[0] == '0': r = r[1:]
27*9a0e4156SSadaf Ebrahimi    return r
28*9a0e4156SSadaf Ebrahimi
29*9a0e4156SSadaf Ebrahimidef to_x(s):
30*9a0e4156SSadaf Ebrahimi    from struct import pack
31*9a0e4156SSadaf Ebrahimi    if not s: return '0'
32*9a0e4156SSadaf Ebrahimi    x = pack(">q", s)
33*9a0e4156SSadaf Ebrahimi    while x[0] in ('\0', 0): x = x[1:]
34*9a0e4156SSadaf Ebrahimi    return to_hex2(x)
35*9a0e4156SSadaf Ebrahimi
36*9a0e4156SSadaf Ebrahimidef to_x_32(s):
37*9a0e4156SSadaf Ebrahimi    from struct import pack
38*9a0e4156SSadaf Ebrahimi    if not s: return '0'
39*9a0e4156SSadaf Ebrahimi    x = pack(">i", s)
40*9a0e4156SSadaf Ebrahimi    while x[0] in ('\0', 0): x = x[1:]
41*9a0e4156SSadaf Ebrahimi    return to_hex2(x)
42