#!/usr/bin/env python
# Capstone Python bindings, by Nguyen Anh Quynnh <aquynh@gmail.com>

from __future__ import print_function
import sys
_python3 = sys.version_info.major == 3


def to_hex(s, prefix_0x = True):
    if _python3:
        if prefix_0x:
            return " ".join("0x{0:02x}".format(c) for c in s)  # <-- Python 3 is OK
        else:
            return " ".join("{0:02x}".format(c) for c in s)  # <-- Python 3 is OK
    else:
        if prefix_0x:
            return " ".join("0x{0:02x}".format(ord(c)) for c in s)
        else:
            return " ".join("{0:02x}".format(ord(c)) for c in s)

def to_hex2(s):
    if _python3:
        r = "".join("{0:02x}".format(c) for c in s)  # <-- Python 3 is OK
    else:
        r = "".join("{0:02x}".format(ord(c)) for c in s)
    while r[0] == '0': r = r[1:]
    return r

def to_x(s):
    from struct import pack
    if not s: return '0'
    x = pack(">q", s)
    while x[0] in ('\0', 0): x = x[1:]
    return to_hex2(x)

def to_x_32(s):
    from struct import pack
    if not s: return '0'
    x = pack(">i", s)
    while x[0] in ('\0', 0): x = x[1:]
    return to_hex2(x)
