[Python] R: Registri modbus

Alessandro T. tagliare3 a yahoo.it
Gio 17 Feb 2022 17:32:13 CET


On 17/02/22 07:34, Vinny Mautone wrote:
> Studiando un pò sono riuscito a scrivere questa funzione che fa il suo 
> dovere, ma volevo capire se era la strada giusta o si potesse 
> velocizzare un po, comunque questa è la funzione
>
> def reg_to_string(reg):
> s = ''
> for ele in reg:
> if ele:
> b = format(ele, '016b')  # converto il registro da decimale in binario
> ch = chr(int(b[:8], 2))  # prendo i primi 8 bit e li converto in char
> if ch.isalnum():  # controllo che sia un numero o una lettera
> s += ch  # lo aggiungo alla stringa
> ch = chr(int(b[8:], 2))  # faccio la stessa cosa con gli altri 8 bit
> if ch.isalnum():
> s += ch
> return s  # ritorno la stringa
>
> Grazie per eventuali correzioni o miglioramenti
>


reg = [21070, 12601, 12340, 12593, 12593, 13312]

versione compatta:
s = ''.join(c for r in reg for i in (1,0) if (c:=chr(r >> 8*i & 
0xff)).isalnum())


versione estesa:
s = []
for r in reg:
   for i in (1,0):
     c = chr(r >> 8*i & 0xff)
     if c.isalnum():
       s.append(c)
s = ''.join(s)

-- 
Alessandro T.

R: Perché leggiamo dall'alto al basso e da sinistra a destra.
D: Perché dovrei iniziare la risposta all'e-mail dopo il testo citato?



Maggiori informazioni sulla lista Python