Estoy usando una API nativa de bajo nivel en la que envío un puntero de buffer de bytes inseguro para obtener un valor de cadena de caracteres.Ayuda con 0 cadenas finalizadas en C#
Por lo tanto, me da
// using byte[255] c_str
string s = new string(Encoding.ASCII.GetChars(c_str));
// now s == "heresastring\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0(etc)";
Así que, obviamente, no estoy haciendo las cosas bien, ¿cómo me deshago del exceso?
Obtuve algo similar cuando recibí una cadena a través de RS-232. Eventualmente lo estaba haciendo mal: descubrí que se llama al controlador para cada byte recibido y en el controlador utilicé 'serialPortInstance.Read (...)' para leer más de 1 byte. – Dor
No estoy seguro, pero podría echarle un vistazo a RegularExpression, algo así como string re1 = "((?: [A-z] [a-z] +))"; y obtenga la primera coincidencia –
La "regla" de cadenas terminadas en nulo es que * todo * que comience con el primer nulo debe ignorarse. Varias de las otras respuestas que simplemente Trim() o Replace() no consideran que podría haber algún "junco" no nulo después del nulo inicial. [Esta respuesta] (https://stackoverflow.com/a/35182252/1633949) brinda una solución de una sola línea. –