Python中十六进制编码的十进制

Python中十六进制编码的十进制,python,hex,Python,Hex,我需要创建一个函数,该函数接受一个整数并返回该整数的二进制字符串,该字符串编码为十六进制十进制,以便以后打包到结构中 例如,我写了以下内容: def convert_int(x): """ Accepts an integer, outputs a hexadecimal string in HCD format Caution! Byte order is ALREADY little endian! """ result = b'' while

我需要创建一个函数,该函数接受一个整数并返回该整数的二进制字符串,该字符串编码为十六进制十进制,以便以后打包到结构中

例如,我写了以下内容:

def convert_int(x):
    """
    Accepts an integer, outputs a hexadecimal string in HCD format
    Caution! Byte order is ALREADY little endian!
    """
    result = b''
    while x > 0:
        hcd = chr(int(str(divmod(x, 100)[1]), 16))
        result = result + hcd
        x = divmod(x, 100)[0]
    return result
所以
convert_int(1234)
将是
3412h
等等。写这篇文章的最具Python风格和优雅的方式是什么

upd:使函数输出小的endian字符串,以便打包

>>> hex(1234)
'0x4d2'
谷歌不是你的敌人

def convert_to_hcd(num):
    chars = []
    while num:
        num, ones = divmod(num, 10)
        num, tens = divmod(num, 10)
        chars.append(chr(tens * 16 + ones))
    chars.reverse()
    return "".join(chars)

convert_to_hcd(1234)    # => returns '\x124' (which is correct because '\x34' == '4')

这是干净的

这个小片段怎么样…:)


def convert_to_hcd(num):返回“.join([“\\x”+(lambda i,k:“+i+k if i!='m'else”0”+k)(i,k)表示zip中的i,k(
num
if not len(
num
)%2 else'm'+
num
)[0::2],(
num
if not len(
num
)%2 else'm>[1::2]))

因此,我的正确代码如下,请注意,字节顺序是颠倒的(小尾端)

def convert_int(x):
"""
Accepts an integer, outputs a hexadecimal string in HCD format
Caution! Byte order is ALREADY little endian!
"""
result = b''
while x > 0:
    hcd = chr(int(str(divmod(x, 100)[1]), 16))
    result = result + hcd
    x = divmod(x, 100)[0]
return result

不是他问的问题,或者它会返回“0x1234”。stackoverflow的一般想法是,您编写一些代码,如果代码不起作用,您首先使用知名的搜索引擎努力搜索可能的解决方案,您可以复制或调整这些解决方案以满足您的需要,只有在代码不起作用的情况下,您才能创建一个stackoverf低问题并粘贴一些代码,这些代码是最小的、可执行的,并显示了您遇到的问题。请注意序列的第一部分:您编写一些代码。抱歉,伙计们,我搞砸了字符串格式。当然,它应该是
0x1234
,而不是
\x12\x34
很好的一个。让我们把这个问题弄清楚。所以您想要例如
converrt_to_hcd(1234)
返回字符串
0x1234
?你确定吗?是的,这正是我所需要的。我正试图通过将整数作为字符串来处理它,但我认为这是个坏主意,而且不是Pythonic。好的。你试过写python代码吗?嗯,没有?
hex
将int转换为字符串,这与w毫无关系实际上,这个函数所做的事情可以更容易地完成:
return'0x'+str(num)
。参考Yuri的答案,看看他想要什么;不是这样。当然,问题不是很清楚。如果OP试图参加一场混乱的Python竞赛,这将是一个很好的答案,但否则,很难理解:)你不这么说……)但它实际上是有效的(如果OP没有重新表述问题的话)。
def convert_int(x):
"""
Accepts an integer, outputs a hexadecimal string in HCD format
Caution! Byte order is ALREADY little endian!
"""
result = b''
while x > 0:
    hcd = chr(int(str(divmod(x, 100)[1]), 16))
    result = result + hcd
    x = divmod(x, 100)[0]
return result