我已经获得了字符串格式数据的摘要值,并且我希望将其十六进制化。
这是示例字符串'\xf0z\xd8[\xfc\x7f'
但是,由于我没有创建哈希值所依据的原始数据,因此无法使用hashlib
。
在字符串上尝试.digesthex()
无效,因为str
对象没有该方法。还有其他选择吗?
答案 0 :(得分:1)
对于原始字符串中的每个字符,请使用ord
获得该字符的数值,然后使用字符串格式操作将该数值表示为包含一对十六进制数字字符的字符串。将这些两位数字的字符串累加为一个字符串。
mystring = '\xf0z\xd8[\xfc\x7f'
result = ''
for ch in mystring:
number = ord(ch)
hexdigits = '{:02x}'.format(number)
result += hexdigits
print result
您可以通过使用列表推导将成对的十六进制数字字符串收集到一个列表中,然后将join
方法与空的分隔符字符串一起使用来将所有十六进制数字字符串粘合在一起,来完成所有这些操作变成单个字符串。
mystring = '\xf0z\xd8[\xfc\x7f'
result = ''.join([ '{:02x}'.format(ord(ch)) for ch in mystring ])
print result
或者可以使用列表map
和lambda
来代替列表理解,以构建十六进制数字对的列表。
mystring = '\xf0z\xd8[\xfc\x7f'
result = ''.join(map(lambda ch: '{:02x}'.format(ord(ch)), mystring))
print result
map
版本较难阅读,但运行速度可能会稍快。