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(
numif not len(
num)%2 else'm'+
num)[0::2],(
numif 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