如何在 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
我在 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