преобразовать из байт-кода в micropython
Я хеширую вещи с uhashlib в micropython на pi pico. Вот пример:
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. У кого-нибудь есть идеи / методы?
3 ответа
Использовать
ubinascii.hexlify
и прыгать через обручи.
ubinascii.hexlify()
возвращается. Посредством декодирования в a и последующего преобразования этого
str
для
int
(с base16), мы можем передать значение в
hex()
. Здесь нет
hex
атрибут для
bytes
в микропитоне.
Приведенное ниже было полностью протестировано на 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
Вы должны иметь возможность напрямую декодировать любые байты в шестнадцатеричное с помощью
.hex()
метод на нем!
>>> b"blerg".hex()
'626c657267'
У меня нет
uhashlib
, но это работает со стоковым
hashlib
!
>>> hashlib.sha256(b"blergh").digest().hex()
'597c8457a11d8663627e0b4c1e5c92cd2d9305dd7a0ee19f9ac1483693d80c38'
>>> hashlib.sha256(b"blergh").hexdigest()
'597c8457a11d8663627e0b4c1e5c92cd2d9305dd7a0ee19f9ac1483693d80c38'
в этом сценарии mpython есть блок кода, который преобразует bytearray в десятичный ascii. Как импортировать эту библиотеку, если она находится в автономном режиме? Я имею в виду, что конкретно делает эта библиотека? Можно ли как-нибудь записать это от руки? потребовалось много месяцев усердия, чтобы найти способ перевести эти библиотеки в рукописный вид. Но могу вас заверить, что в них нет абсолютно никаких внешних команд, которые необходимо импортировать или скачивать из какого-либо репозитория или библиотеки. Я отчасти горжусь этим.[https://wokwi.com/projects/376341312102027265][https://wokwi.com/projects/376341312102027265]
puter=bytearray(1)
while 1:
k=machine.Pin(28).value()
if (k>b):
k1=k1+1-4*(k1>3)
b=k
k2=machine.Pin(27).value()
if (k2>b2):
k1=k1+1-4*(k1>3)
b2=k2
rvdc=machine.ADC(26).read_u16()
if ttt==t:
machine.lightsleep(100)
if ttt!=t:
ttt=t
s=str(int((t/60-t//60)*60));m=str(int((t/3600-t//3600)*60));h=str(int((t/86400-t//86400)*24));d=str(t//86400);w=str((t//86400*7)) # Extrapolate seconds hours minutes and days from raw uptime seconds
tt=("00"+h)[-2:]+("00"+m)[-2:]+("00"+s)[-2:]+("00"+d)[-2:]+"77" # compile the output buffer
for nn in range(8):
n=int(tt[nn])
machine.SPI(0,baudrate=32768,sck=machine.Pin(2),mosi=machine.Pin(3),miso=machine.Pin(4)).readinto(puter,int(ssebr[n*8:n*8+8],2))
chrout=str(puter)[12]
if chrout==chr(92):
print(ord(chr(int("0x"+(str(puter)[14:16])))),"$",end="")
if chrout!=chr(92):
print(ord(str(puter)[12]),"@",end="")
machine.Pin(0).value(0) # low latched the data into the display
machine.Pin(0).value(1) # high latched the data into the display
print("")