Używam natywnego natywnego API, w którym wysyłam wskaźnik bufora niepewnych bajtów, aby uzyskać wartość ciągów znaków.Pomoc z 0 zakończonymi łańcuchami w C#
Więc to daje mi
// 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)";
Tak oczywiście nie robię to dobrze, w jaki sposób pozbyć się nadmiaru?
Mam coś podobnego, gdy otrzymałem ciąg przez RS-232. W końcu zrobiłem to źle: odkryłem, że program obsługi jest wywoływany dla każdego otrzymanego bajtu, a w programie obsługi użyłem "serialPortInstance.Read (...)", aby przeczytać więcej niż 1 bajt. – Dor
Nie jestem pewien, ale mogę rzucić okiem na RegularExpression, coś jak ciąg re1 = "((?: [A-z] [a-z] +))"; i uzyskaj pierwszy mecz –
"Reguła" łańcuchów zakończonych znakiem pustym jest taka, że * wszystko * zaczynające się od pierwszej wartości zerowej powinno zostać zignorowane. Kilka innych odpowiedzi, które po prostu Trim() lub Replace() nie biorą pod uwagę, że po początkowej wartości zerowej mogą występować pewne "puste wiadomości" o wartości zerowej. [Ta odpowiedź] (https://stackoverflow.com/a/35182252/1633949) daje rozwiązanie jednokreskowe. –