Newsgroup: it.comp.lang.delphi
Titolo: Trasformazione da char a byte

Ciao a tutti.
Un mio collega deve inviare un array di byte a un dispositivo.
Il dato da inviare è un numero intero, da trasformare in formato
esadecimale. Con la funzione IntToHex otteniamo la formattazione del
valore in stringa di due caratteri (es. 10 -> 0A)
A questo punto, come è possibile trasformare il valore restituito
dalla IntToHex in un elemento da inserire nell'array di byte?
     Marco Bortolani
     info @ 
marcobortolani.it

 dalla IntToHex in un elemento da inserire nell'array di byte?
Se il valore è in una stringa..hai gia l'array.
per inviarla ti basta passare il puntatore della stringa.
Bye,
Raktzo

No questa non l'ho proprio capita. Un Byte che lo rappresenti in 
decimale, binario, esadecimale, etc... è sempre un byte ed è sempre un 
nubero composto da 8 bit e compreso tra 0 e 255. Quello che dici tu è 
valido se devo trasferire una stringa e non un valore numerico.
Mi spiego...
Se in un manuale leggo "Passare il carattere 0D (esadecimale) alla 
funzione Invia (definita come Invia(Valore : Byte)) per ottenere una 
stampa" posso usare:
Invia($0D);   -> Esadecimale
Oppure
Invia(13);    -> Decimale
Oppure
Invia($0A+3); -> Somma di un numero decimale ed un'altro esadecimale
In tutti e tre i casi invio sempre il numero 13 decimale
Ciao,
David

 per inviarla ti basta passare il puntatore della stringa.
Il mio collega, quando gli ho riferito la tua risposta (non riesce ad
usare internet perchè è collegato con il dispositivo), è stato
illuminato sulla via di Damasco...
Ottimo :-)
    Marco

Hai totalmente e assolutamente ragione.
Poichè l'esempio del manuale del dispositivo utilizzava i numeri
esadecimali, il mio collega si era inzuccato con quelli. Poi però
ragionando un attimo (aiutato in questo anche da te e Raktzo), ha visto
la luce :-))
Grazie anche a te.
    Marco

 ha scritto nel messaggio 
news:1130319061.8...@g47g2000cwa.googlegroups.com...


Se ad un dispositivo non puoi mandare tutto il set ASCII o usa l'ascii 7bit
come rappresenti tutti i caratteri? Li converti tutti in hex (stringa) e li
mandi al dispositivo.
ad esempio, devo mandare la lettera "A" non mando il byte 65, ma mando la
stringa "41"
Oppure fai una conversione mime64 uuencode o altre cose simili.
Il protocollo mail ad esempio usa questi per gli allegati "binari"
Bye,
Raktzo

 stringa "41"
???

 ???
la lettera "A" in ascii è il byte 65, in hex rappresentato come 41.
il "4" in ascii è il byte 52 mentre il "1" equivale al 49.
fatta la conversione non vado ad inviare il singolo 65, ma 52 e 49.
Bye,
Raktzo

 fatta la conversione non vado ad inviare il singolo 65, ma 52 e 49.
L'ho capito, ma non capisco a che pro.

> L'ho capito, ma non capisco a che pro.
Esempio pratico, tratto dal protocollo di comunicazione di uno strumento.
Usa STX ed ETX per inizio e fine trama, manda n field e usa il CR per
terminare il field. Inoltre ogni field è identificato da un byte da 32 a
255.
Quella conversione viene fatta per l'invio della bitmap di uno dei grafici.
Bye,
Raktzo

 Quella conversione viene fatta per l'invio della bitmap di uno dei grafici.
Fattelo dire, è una convenzione alquanto "strana".  Se il range 
accettabile è tra 32 e 255, non capisco che problema ci sia 
nell'inviare un 65.  Non capisco quale sia la necessità di 
convertirlo in esadecimale e mandare i codici ASCII delle singole 
lettere che compongono il numero.  Mi sembra, onestamente, un giro 
contorto...

 nell'inviare un 65.  Non capisco quale sia la necessità di
L'inghippo sta nell'invio del bitmap che non può contenere il byte 02
(potrebbe essere confuso con l'etx) ne il 03 (stx) nemmeno l'ack o il nak,
il cr, il soh e tutti i caratteri riservati per la gestione della
comunicazione.
Facendo quella conversione lui mi manda solo 16 simboli al posto dei 256.
Sicurmante la cosa sarebbe stata meglio ottimizzata usando altri tipi di
conversione, tipo il mime64 o l'uuencode.
Quello che accade anche con gli attachment delle mail.
Bye,
Raktzo