【发布时间】:2011-02-04 14:19:25
【问题描述】:
我正在使用一个低级原生 API,我在其中发送一个不安全的字节缓冲区指针来获取一个 c 字符串值。
所以它给了我
// 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)";
所以很明显我做得不对,我如何摆脱多余的?
【问题讨论】:
-
当我通过 RS-232 收到一个字符串时,我得到了类似的东西。最终我做错了:我发现每个接收到的字节都会调用处理程序,并且在处理程序中我使用
serialPortInstance.Read(...)读取超过 1 个字节。 -
我不确定,但可能会看看正则表达式,比如 string re1="((?:[a-z][a-z]+))";并获得第一场比赛
-
以空字符结尾的字符串的“规则”是应该忽略以第一个空字符开头的所有内容。仅 Trim() 或 Replace() 的其他几个答案并未考虑在初始 null 之后可能存在一些非 null“垃圾”。 This answer 给出了一条线的解决方案。