преобразовать из байт-кода в 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("")
Другие вопросы по тегам