|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: May 2000
Messaggi: 1135
|
[C#] Conversione ASCII in string
Ciao a tutti,
io ho una stringa che rappresenta una frase in esadecimale (abcdefg) "006162636465666700000000" più altri caratteri (gli "00"). Il mio problema è di convertire quella stringa in una stringa "leggibile" da parte dell'utente ma non ho capito come fare. Grazie NapalM
__________________
Ultima modifica di Napalm : 07-11-2008 alle 11:52. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Codice:
string input = "006162636465666700000000"; StringBuilder output = new StringBuilder(""); for (int i = 0; i < input.Length-1; i+=2) { Int32 n = Convert.ToInt32(input.Substring(i, 2), 16); if (n != 0) { char C = Convert.ToChar(n); output.Append(C); } } MessageBox.Show(output.ToString()); ![]() |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: May 2000
Messaggi: 1135
|
Grazie mille
![]() NapalM |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Feb 2007
Città: San Benedetto del Tronto
Messaggi: 538
|
a me serve il contrario...data una stringa ASCII es. "Hello" devo ottenere una stringa contenente i valori in esadecimale dei singoli caratteri "48464C4C4F". Come posso farlo ?
__________________
Ogni popolo ha il governo che si merita... Ho concluso trattative con: Aminopro, malag, oldfield |
![]() |
![]() |
![]() |
#6 |
Member
Iscritto dal: Jul 2008
Messaggi: 237
|
|
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Feb 2007
Città: San Benedetto del Tronto
Messaggi: 538
|
L'ho appena provato e restituisce 7269767679 invece di 48464C4C4F, come mai ? (TUA_STRINGA è HELLO)
__________________
Ogni popolo ha il governo che si merita... Ho concluso trattative con: Aminopro, malag, oldfield |
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Quote:
69d = 0x46 76d = 0x4C Stai stampando i bytes in decimale. Stampali in esadecimale e ti verra' fuori il risultato
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Feb 2007
Città: San Benedetto del Tronto
Messaggi: 538
|
come li converto in esadecimale ? qual'è il comando ?
__________________
Ogni popolo ha il governo che si merita... Ho concluso trattative con: Aminopro, malag, oldfield |
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
Comunque metodi ce ne sono diversi, come questo : Codice:
string input = "HELLO"; StringBuilder stringaHex = new StringBuilder(""); byte[] caratteri = System.Text.Encoding.ASCII.GetBytes(input); foreach (char ch in caratteri) { string h = String.Format("{0:X}", Convert.ToInt32(ch)); stringaHex.Append(h); } MessageBox.Show(stringaHex.ToString()); Codice:
string input = "HELLO"; StringBuilder stringaHex = new StringBuilder(); foreach (char c in input) { stringaHex.Append(Convert.ToString((int)c, 16 )); } MessageBox.Show(stringaHex.ToString()); ![]() |
|
![]() |
![]() |
![]() |
#11 | |
Senior Member
Iscritto dal: Feb 2007
Città: San Benedetto del Tronto
Messaggi: 538
|
Quote:
Invece di mettere il valore in stringaHex devo mettere il valore esadecimale di ogni carattere in una variabile byte txBuff[] Qual'è il codice per inserire ogni valore esadecimale di c e inserirlo nel vettore di tipo byte ?
__________________
Ogni popolo ha il governo che si merita... Ho concluso trattative con: Aminopro, malag, oldfield |
|
![]() |
![]() |
![]() |
#12 | |
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
Codice:
string input = "HELLO"; byte[] txBuff = new byte[input.Length]; string hexChar; for(int i=0;i<input.Length;i++) { hexChar = Convert.ToString((int)input[i], 16); txBuff[i] = byte.Parse(hexChar, System.Globalization.NumberStyles.HexNumber); } ![]() |
|
![]() |
![]() |
![]() |
#13 | |
Member
Iscritto dal: Jul 2008
Messaggi: 237
|
Quote:
Codice:
byte[] txBuff = System.Text.Encoding.ASCII.GetBytes(input); Non ha senso parlare di bytes in formato decimale o esadecimale tranne che se uno li stampa. E per stamparli il modo più veloce e pulito è fare Codice:
foreach(var b in txBuff) Console.Write(b.ToString("X2")); //stampa esattamente quello che ti aspetteresti |
|
![]() |
![]() |
![]() |
#14 | |
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
La richiesta di Samb1985 era espressamente questa : "Qual'è il codice per inserire ogni valore esadecimale di c e inserirlo nel vettore di tipo byte ?" A domanda ho risposto, ipotizzando che, per qualche oscuro motivo dovesse prima avere i valori esadecimali di ogni carattere, uno per uno, e poi inserirli nell'array di Byte. |
|
![]() |
![]() |
![]() |
#15 |
Senior Member
Iscritto dal: Feb 2007
Città: San Benedetto del Tronto
Messaggi: 538
|
Vi ringrazio entrambi per l'auito. Sto risolvendo.
Ho bisogno dei singoli valori perchè essendo un comando per un dispositivo collegato via usb, i valori che ottenuti dalla stringa sono una parte variabile del vettore dalla posizione 11 in poi, mentre le prime posizioni sono valori fissi.
__________________
Ogni popolo ha il governo che si merita... Ho concluso trattative con: Aminopro, malag, oldfield |
![]() |
![]() |
![]() |
#16 |
Member
Iscritto dal: Jul 2008
Messaggi: 237
|
In tal caso ti consiglio di usare questo sistema:
Codice:
byte[] datiFissi = ...; datiFissi.Concat(System.Text.Encoding.ASCII.GetBytes(TUA_STRINGA)).ToArray() Codice:
using System.Linq; |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 04:52.