Newsgroup: it.comp.lang.visual-basic
Titolo: conversione caratteri

devo convertire una stringa di caratteri numerici in un'altra in modo
che due caratteri vengano memorizzati in un solo byte ossia il primo
carattere nel mezzo byte di sinistra e il secondo nel mezzo byte di
destra.
questa stringa va poi scritta in un file.
in altre parole la stringa 00010203 (otto byte) deve diventare hex'00'
hex'01' hex'02' hex'03' (quattro byte)
come fare se i primi due caratteri sono due zeri?


Non capisco il problema con i primi due caratteri... qualcosa 
del genere ti andrebbe bene?
<UNTESTED>
    Dim s1 As String
    Dim s2 As String
    Dim i As Integer
    s1 = "00010203"
    s2 = ""
    For i = 1 To Len(s1) Step 2
        s2 = s2 & Chr(Val("&H" & Mid(s1, i, 2)))
    Next
</UNTESTED>
HTH,
Steve. 

claudio ha usato la sua tastiera per scrivere :

Che i primi due caratteri siano due zeri o due 9 non ti cambia niente.
Comunque sia devi scorrere la stringa con un For Next Step 2, 
prelevando due char alla volta con Mid$, e di questa sottostringa fai 
la conversione in byte da Hex. Poi appendi questo byte all'array di 
byte che poi butterai dove ti pare, nel tuo caso in un file binario.
Ciao
Alberto
-- 
Si è visto di meglio,
ma si è scopato di peggio,
qualche volta a pago
e non erano neanche sempre donne
[Paolo]

> Che i primi due caratteri siano due zeri o due 9 non ti cambia niente.
IMHO gli cambia, perché la Hex$ restituisce unastringa di lunghezza
variablie a seconda del valore passato, però la si può "riempire" a
sinistra con una Right$("0000000" & Hex$(x))
Ciao.
Mauro

 Right$("0000000" & Hex$(x))
Ops... ho perso il ", 8"
Right$("0000000" & Hex$(x), 8)
Ciao.
Mauro

Mauro ha detto questo martedì :

?
Hex$ converte da numerico a stringa.
Qui si parla di convertire da stringa a numero (che poi viene usato per 
fare un Chr$, ma è una fase successiva alla conversione).


     Next
La soluzione sembra ottima.
Volendo perfezionarla, direi che si può modificare la riga 'cardine' 
in:
         s2 = s2 & Chr(Val("&H" & Left$(Mid(s1, i, 2) & "0",2)))
in modo da gestire il caso del numero dispari di caratteri (che poi non 
so se vada bene che venga gestito così, dipende da cosa voleva l'OP).
Ciao



convertire da otto byte a quattro byte e' una cretinata:
dim s as string
dim i as Long
	s = "00010203"
	i = VAL("&H"+S$)
se invece e' l'ordine dei byte che ti preoccupa cioe' vuoi che
il piu' significativo sia il primo (formato BIG-ENDIAN)
la cosa e solo poco piu' complessa:
Type vLong
     V As Long
End Type
Type vByte
     V(3) As Byte
End Type
Private Sub Form_Click()
Dim s As vLong
Dim LITTLE_ENDIAN As vByte
Dim BIG_ENDIAN As vByte
Dim i As Long
     s.V = Val("&H00010203")
     LSet LITTLE_ENDIAN = s
     Me.Cls
     Print "Formato: LITTLE_ENDIAN"
     For i = 0 To 3
         Print Hex$(LITTLE_ENDIAN.V(i))
     Next i
     Print "Convertito in"
     For i = 0 To 3
         BIG_ENDIAN.V(3 - i) = LITTLE_ENDIAN.V(i)
     Next i
     Print "Formato: BIG_ENDIAN"
     For i = 0 To 3
         Print Hex$(BIG_ENDIAN.V(i))
     Next i
End Sub
bye
r

 	i = VAL("&H"+S$)
Beh, ma questa vale solo per il caso specifico di 8 che diventa 4.
Immagino fosse solo un esempio.


confermo: da 8 a 4 era un esempio, cmq ho capito, problema risolto.
grazie a tutti!

 grazie a tutti!
Grazie a te per averci resi partecipi del codice che ne è uscito.
