转换为十六进制字符串

转换为十六进制字符串

Closed. This question needs details or clarity 。它目前不接受答案。












想改善这个问题吗?添加细节并通过 editing this post 澄清问题。

7年前关闭。



Improve this question




我有一个长长的列表,看起来像这样:
[True, True, True, False, ... ]

在瓷砖 map 中表示墙壁。不能保证它是 4 的倍数,但它是否在最后被填充并不重要。

我想将其转换为十六进制字符串,因此对于上面的示例,它将以 E 开头 ...

我希望有一种很好的优雅方式来做到这一点(使用 Python 2.7.3)!

谢谢。

已编辑

这是 9x9 map 的示例:
map = [True, True, True, True,
       True, True, True, True,
       True, True, True, True,
       True, False, False, True,
       True, True, True, True,
       True, False, False, False,
       False, True, True, True,
       True, True, False, False,
       False, False, True, True,
       True, True, True, True,
       False, False, True, True,
       True, True, True, True,
       True, True, True, True,
       True, True, True, True,
       True, True, True, True,
       True, True, True, True,
       True, True, True, True,
       True, True, True, True,
       True, True, True, True,
       True, True, True, True,
       True]# False, False, False padded

我想要的是能够
str = heximify(map)
print str
> FFF9F87C3F3FFFFFFFFF8

最佳答案

加入单线俱乐部,通过位操作似乎更合适。

val = hex(reduce(lambda total, wall: total << 1 | wall, walls, 0))

这与以下内容相同:
val = 0
for wall in walls:
    val <<= 1 # add one 0 bit at the "end"
    val |= wall # set this bit to 1 if wall is True, otherwise leave it at 0

val = hex(val) # get a hex string in the end
val = format(val, 'x') # or without the leading 0x if it's undesired

关于python - 将列表转换为十六进制字符串的优雅方式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17731822/

10-09 12:42