2010-05-27 31 views
6

Supponiamo di voler utilizzare il carattere speciale ASCII FS (0x1C) in una stringa .Net e quindi di formattare un array di byte dalla stessa stringa con il carattere speciale correttamente rappresentato come un singolo byte, come dovrei farlo? Non riesco a capirlo.Come scrivere caratteri speciali ASCII in una stringa .net

Grazie per l'aiuto che puoi dare.

+0

Prima di rispondere alla tua domanda, sarei interessato a sapere perché stai provando a convertire una stringa in un array di byte. –

+0

Sto scrivendo una funzione che analizzerà un array di byte proveniente da una porta seriale, ma al momento sto lavorando cieco e non ho dati reali da testare. Dal momento che ho la documentazione che mostra il formato posso creare i miei dati, e vorrei solo scriverlo come una stringa .Net, convertirlo in un array di byte, e quindi analizzarlo usando la mia funzione. Ma forse c'è un modo migliore. Sono aperto a suggerimenti anche su questo. – JimDaniel

risposta

3

E 'piuttosto dipende dalla natura del formato dei dati porta seriale. Se i dati sono costituiti principalmente da caratteri di testo ASCII intervallati dal carattere di controllo occasionale, è possibile incorporarli nella stringa, ad es.

var data1 = Encoding.ASCII.GetBytes("Foo\x1CBar\x1CBaz"); 

Tuttavia, se i dati consiste di diversi campi di vari tipi di dati, allora la classe BitConverter può essere più utile, ad esempio

var data2 = new List<byte>(); 
// Add an int value 
data2.AddRange(BitConverter.GetBytes(6)); 
// Add a control character 
data2.Add(0x1C); 
// Add an ASCII-encoded string value 
data2.AddRange(Encoding.ASCII.GetBytes("Hello")); 

Come altri hanno fatto notare, ASCII non è l'unica stringa di codifica si potrebbe usare, ma da una porta seriale è la più probabile.

+0

Grazie, BitConverter sarà utile nella mia situazione. – JimDaniel

3

Ecco come incorporare in una stringa:

"\x1C" 

è la rappresentazione di stringa di quel singolo carattere. Supponiamo che si voleva ottenere fuori come un array di byte:

byte[] bytes = Encoding.ASCII.GetBytes("\x1C"); 

E se si voleva ottenere una stringa da un array di byte:

string s = Encoding.ASCII.GetString(bytes); 

essere consapevoli che ci sono anche altre codifiche, come UTF8, nello spazio dei nomi Encoding che potrebbe funzionare meglio a seconda del tuo neeed - anche se leggendo da una linea seriale probabilmente vuoi un semplice ASCII.

+0

Questo è quello che mi mancava, grazie! – JimDaniel

1

Si dovrebbe guardare la classe ASCIIEncoding http://msdn.microsoft.com/en-us/library/system.text.asciiencoding.aspx Se si desidera trattare con ASCII. Le stringhe .Net sono unicode (UCS2). Se si desidera una codifica specifica è necessario utilizzare una delle classi di codifica.

è possibile incorporare un carattere non stampabile da scampo "La mia stringa \ X1c"

Problemi correlati