Forum >> Principianti >> Conversione ASCII a HEX II puntata

Pagina: 1 2 Avanti

Diciamo che questo è una specie di prosecuzione della mia precedente discussione
Stringa di partenza

chr(0)+chr(0)+chr(0)+chr(0)+chr(77)+chr(0)+chr(240)+chr(0)

Risultato da encode

\x00\x00\x00\x00M\x00\xc3\xb0

Cosa di maggiore importanza è quel xc3 che vale 195

A me serve un \xf0 e magari un \4d al posto della M

Fintanto non avrò xf0 non potro verificare se venga accettata la M

Chi mi ha passato le specifiche dice : "sono byte in utf-8 se non ricordo male"

Per la cronaca è una intestazione di un messaggio diretto ad un Modem Software per Packet Radio


Ringrazio anticipatamente per ogni aiuto




PS: il tracciato complessivo
\x00\x00\x00\x00\x4d\x00\xf0\x00 <- intestazione (fissa)

\x4e\x4f\x56\x45\x47\x31 <- mittente da 6 byte

\x00\x00\x00\x00 <- separatore (fisso)

\x41\x4c\x4c\x31\x32\x33 <- destinatario da 6 byte

\x00\x00\x00\x00 <- separatore (fisso)

\x06 <- dimensione messaggio
massimo 256 caratteri

\x00\x00\x00\x00\x00\x00\x00 <- separatore (fisso)

\x63\x69\x61\x6f\x31 <- messaggio (ciao1)

\x0d <- chiusura












--- Ultima modifica di Pietro Bruno Lancerotto in data 2024-02-01 11:19:00 ---
--
Bruno L.
Scusa se rispondo solo per curiosità, ma riferisci ad un protocollo per scambio dati tra radioamatori (tipo lo AX25)?




Di per se NON conosco l'argomento, ma se si tratta di questo segnalo che di GitHub vi sono alcune librerie python al riguardo, raggiungibili con una ricerca tipo "python ax25 protocol" ... in ogni caso mi sembra un argomento "complicato" trattandosi, in sostanza, di una specie di protocollo di rete, tipo il TCP-IP


Fatti non foste a viver come bruti...
Scusa se rispondo solo per curiosità, ma riferisci ad un protocollo per scambio dati tra radioamatori (tipo lo AX25)?

Dico di SI ma ...
Lo scopo è quello di sfruttare un programma ( SoundModem) per trasmettere dei dati e non per attività radioamatoriale
Ma gira gira la sostanza è quella
Il Terminale invia quella stringa ed il SoundModem fa tutto il resto

Ovvio che mettere insieme il terminale e comporre la stringa può essere banale

Lo ho fatto io che ho aperto Python da 15 giorni.




Tutta la questione del'AX25 la sbriga il SuondModem


Il primo problema è convertire la stringa in modo corretto ; se la mando corretta manualmente la radio trasmette.
Il secondo tenere aperta la comunicazione TCP/IP perchè il SoundModem rimanda indietro quanto inviatoli e tutto quello che riceve via radio


Grazie di essere intervenuto



--- Ultima modifica di Pietro Bruno Lancerotto in data 2024-02-02 14:54:54 ---
--
Bruno L.
raggiungibili con una ricerca tipo "python ax25 protocol" .

Se faccio una ricerca di questo tipo trovo risposte del tipo


import audiogen

from audiogen.util import multiply

from audiogen.util import constant

MARK_HZ = 1200.0

SPACE_HZ = 2200.0

BAUD_RATE = 1200.0




Questo serve per implementare il modem

Che io ho già e fischietta allegramente




Io devo realizzare il Terminale, non mi interessa l'AX25

Dovrò farmi un testone così su tutti i modi per manipolare le stringhe in modo da poter ottenere quel formato

Cosa che comunque sto già facendo ma ne escono caratteri errati; tipo quel chr(240) che esce come 195

Sostanzialmente è l'unico a dar problemi




Poi verrà il completamento del TCP/IP ora a senso unico :confused: :(


--
Bruno L.
Pietro Bruno Lancerotto said @ 2024-02-02 14:49:10:
...
Il Terminale invia quella stringa ed il SoundModem fa tutto il resto
Ovvio che mettere insieme il terminale e comporre la stringa può essere banale
...
Giuro di non aver mai visto una "problematica" del genere ... di per se, le comunicazioni tramite protocollo TCP-IP avvengono tramite pacchetti di dati binari, encoding e decoding, ovviamente, possono avvenire in numerose modalità di codifica, tra le quali lo "utf-8" è solo una ... sinceramente non ho mai visto sequenze del genere da Te indicato nelle comunicazioni tra socket.
premettendo che quanto da Te cercato per i valori "77" e "240" altro non sono che la rappresentazione esadecimale di tali valori:hex(77)
'0x4d'
hex(240)
'0xf0'
a Te occorre la codifica in utf-8 di detti valori
chr(77).encode('utf-8')
b'M'
chr(240).encode('utf-8')
b'\xc3\xb0'
che NON È proprio una espressione esadecimale, nota che lo utf-8 del carattere 240 comporta due byte per la rappresentazione ... dato per assodato che Tu debba inviare un insieme di dati (binari) come da Te indicato, forse potresti fare:
str(chr(0)+chr(0)+chr(0)+chr(0)+chr(77)+chr(0)+chr(240)+chr(0)).encode('utf-8')
b'\x00\x00\x00\x00M\x00\xc3\xb0\x00'
provaci
EDIT: me ne ero dimenticato, qualora proprio Ti servisse la stinga corrispondente potresti fare:
bin_str = b'\x00\x00\x00\x00M\x00\xc3\xb0\x00'
bin_str.decode('utf-8')
'\x00\x00\x00\x00M\x00ð\x00'
... ma suggerirei anche altre prove, tipo crearti un buffer dei caratteri già codificati ed inviare quello, una cosa così:values = [0,0,0,0,77,0,240,0]
buff = [chr(x).encode('utf-8') for x in values]
buff
[b'\x00', b'\x00', b'\x00', b'\x00', b'M', b'\x00', b'\xc3\xb0', b'\x00']
al fine di trovare qualcosa di più "pratico" per costruire le Tue stringhe

... comunque, rimane un ben strano modo di comunicare con 'sto soundmodem, (è quello giusto?), non posso testarlo perché non uso windows, quindi non approfondisco, ma non dice nulla riguardo alle comunicazioni TCP-IP?

Ciao

--- Ultima modifica di nuzzopippo in data 2024-02-02 17:30:18 ---
Fatti non foste a viver come bruti...
import binascii

num = 255 # numero da sostituire per le varie prove

nume = hex(num)

print(nume)

a = nume.encode()

print(a)

b = str(a)

c = b[:-1] # tolgo ' a destra

c = c[4:]  # tolgo b'0x a Sinistra

# ricostruisco la stringa come va bene a me

if len(c) > 1 :
     c = 'x' + c
else :
    c = 'x0' + c
c = "\\" + c

print(c)
*******************

Dimmi pure che sono fuori fase ma per me basta che funzioni

All'alba dei 75 anni ...... ;) :)


Allegherò una immagine del famigerato SoundModem

Farò comunque una prova col 240 in doppio byte \xc3\xb0 per vedere se lo accetta

Adesso mi dedicherò al socket e sicuramente tornerò a scassare l'anima

Grazie ancora
--
Bruno L.
import binascii
num = 255 # numero da sostituire per le varie prove
nume = hex(num)
print(nume)
a = nume.encode()
print(a)
b = str(a)
c = b[:-1] # tolgo ' a destra
c = c[4:]  # tolgo b'0x a Sinistra
# ricostruisco la stringa come va bene a me
if len(c) > 1 :
     c = 'x' + c
else :
    c = 'x0' + c
c = "\\" + c
print(c)
Dimmi pure che sono fuori fase ma per me basta che funzioni
All'alba dei 75 anni ...... ;) :)

Allegherò una immagine del famigerato SoundModem

Farò comunque una prova col 240 in doppio byte \xc3\xb0 per vedere se lo accetta

Adesso mi dedicherò al socket e sicuramente tornerò a scassare l'anima
Grazie ancora
--
Bruno L.
Ciao Pietro Bruno, o solo Pietro, o solo Bruno (scegli tu), ho editato i tuoi messaggi perché tutti quei tag color hanno fatto impazzire il motore del forum, di per sé già fragile.

Si sono accavallati tra loro, alcuni erano aperti e non chiusi.. insomma un bel casino.

Nessuna colpa tua per carità, abbi pietà di noi.

Cya
Grazie

E' possibile disattivare la colorazione ed identazione ??


Tanto per far vedere un pezzo di codice si capisce lo stesso




Tutti mi chiamano Bruno




--- Ultima modifica di Pietro Bruno Lancerotto in data 2024-02-04 09:51:56 ---
--
Bruno L.
Ciao Bruno.
Pietro Bruno Lancerotto said @ 2024-02-04 09:51:16:
E' possibile disattivare la colorazione ed identazione ??

In che senso scusa? Sei tu ad attivare colori e code, forse non ho capito la domanda, basta non farlo in fase di inserimento. Se invece arriva da un copia ed incolla, beh semplicemente copia il testo raw e risolvi tutto.

Ho editato i tuoi messaggi comunque, il codice ora si vede.

Cya


Pagina: 1 2 Avanti



Esegui il login per scrivere una risposta.