如何在 micropython 中从 bytearray/bytes 转换?

How to convert from bytearray/bytes in micropython?

我在 pi pico 的 micropython 中使用 uhashlib 进行哈希处理。这是一个例子:

import sys
import os
import uhashlib
import time

time_now = "blergh"
hash_test = uhashlib.sha256(time_now).digest()

print(time_now)
print(hash_test)

这输出:

blergh
b'Y|\x84W\xa1\x1d\x86cb~\x0bL\x1e\\x92\xcd-\x93\x05\xddz\x0e\xe1\x9f\x9a\xc1H6\x93\xd8\x0c8'

...这显然不是很有用。我已经尝试了很多东西,但我无法弄清楚如何从 micropython 中的字节 (b'...') 进行转换。有人有ideas/methods吗?

您应该能够使用 .hex() 方法直接将任何字节解码为十六进制!

>>> b"blerg".hex()
'626c657267'

我没有 uhashlib,但这适用于股票 hashlib

>>> hashlib.sha256(b"blergh").digest().hex()
'597c8457a11d8663627e0b4c1e5c92cd2d9305dd7a0ee19f9ac1483693d80c38'
>>> hashlib.sha256(b"blergh").hexdigest()
'597c8457a11d8663627e0b4c1e5c92cd2d9305dd7a0ee19f9ac1483693d80c38'

使用 ubinascii.hexlify 并跳过篮筐。

ubinascii.hexlify()returnsbytes。通过将 bytes 解码为 str,然后将 str 转换为 int(使用 base16),我们可以将值传递给 hex()bytes 在 micropython 中没有 hex 属性。

以下已在 Raspberry Pi Pico 运行 micropython 1.14 上进行了全面测试。我怀疑早期版本也可以工作,只要它们拥有两个模块依赖项。

import ubinascii, uhashlib

hs = uhashlib.sha256(b'blergh')

def hexdigest(sha):
    return hex(int(ubinascii.hexlify(sha.digest()).decode(), 16))

hx = hexdigest(hs) #0x597c8457a11d8663627e0b4c1e5c92cd2d9305dd7a0ee19f9ac1483693d80c38