2010-05-27 34 views
6

Supongamos que deseo usar el carácter especial ASCII FS (0x1C) en una cadena .Net, y luego ser capaz de formatear una matriz de bytes de esa misma cadena con el carácter especial debidamente representado como un solo byte, ¿cómo lo haría? Parece que no puedo entenderlo.Cómo escribir caracteres especiales ASCII en una cadena .Net

Gracias por cualquier ayuda que pueda dar.

+0

Antes de responder a su pregunta, me interesaría saber por qué está tratando de convertir una cadena en una matriz de bytes. –

+0

Estoy escribiendo una función que analizará una matriz de bytes procedente de un puerto en serie, pero estoy trabajando a ciegas en este momento y no tengo datos reales para probar. Como tengo la documentación que muestra el formato, puedo crear mis propios datos, y me gustaría simplemente escribirlo como una cadena .Net, convertir eso a una matriz de bytes, y luego analizar eso usando mi función. Pero tal vez hay una mejor manera. Estoy abierto a sugerencias con respecto a eso también. – JimDaniel

Respuesta

3

Más bien depende de la naturaleza del formato de datos del puerto serie. Si los datos consisten principalmente en caracteres de texto ASCII intercalados con el carácter de control ocasional, puede insertarlos en la cadena, p.

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

Sin embargo, si los datos se compone de varios campos de distintos tipos de datos, entonces la clase BitConverter puede ser más útil, por ejemplo,

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")); 

Como otros han señalado, ASCII no es la única serie de codificación se puede utilizar, pero desde un puerto serie es la más probable.

+0

Gracias, BitConverter será útil en mi situación. – JimDaniel

3

Aquí es cómo incrustar en una cadena:

"\x1C" 

es la representación de serie de dicho solo carácter. Suponga que desea sacarlo como una matriz de bytes:

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

Y si se quería obtener una cadena de una matriz de bytes:

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

Tenga en cuenta que también hay más codificaciones, como UTF8, en el espacio de nombres de codificación que podría funcionar mejor dependiendo de su necesidad: aunque lea de una línea serie, probablemente desee ASCII simple.

+0

¡Eso es lo que me estaba perdiendo, gracias! – JimDaniel

Cuestiones relacionadas