ceo*_*kka 4 c# string ip-address
我通过TCP套接字收到了一个字符串.这个字符串看起来像这样:
str = "10.100.200.200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
Run Code Online (Sandbox Code Playgroud)
我该如何解析这个IPAddress?如果我这样做,
IPAddress.TryParse(msg.nonTargetIP.Trim(), out ip);
Run Code Online (Sandbox Code Playgroud)
它无法解析.
删除那些尾随null的最简单方法是什么?
Jon*_*eet 14
其他示例向您展示了如何修剪字符串 - 但最好不要让"坏"数据开始.
我的猜测是你有这样的代码:
// Bad code
byte[] data = new byte[8192];
stream.Read(data, 0, data.Length);
string text = Encoding.ASCII.GetString(data);
Run Code Online (Sandbox Code Playgroud)
这忽略了返回值Stream.Read.你的代码应该是这样的:
// Better code
byte[] data = new byte[8192];
int bytesRead = stream.Read(data, 0, data.Length);
string text = Encoding.ASCII.GetString(data, 0, bytesRead);
Run Code Online (Sandbox Code Playgroud)
请注意,您还应该检查流是否已关闭,并且不要假设您能够在一次呼叫中读取所有数据Read,或者Write在另一端的一次呼叫对应于一次呼叫Read.
当然完全有可能根本不是这种情况 - 但你应该真正检查另一端是否试图在数据末尾发送这些额外的"空"字节.这听起来不太可能.
Ian*_*Ian 13
IPAddress.TryParse(msg.nonTargetIp.Replace("\0", String.Empty).Trim(), out ip);
Run Code Online (Sandbox Code Playgroud)
或者读取Trim(),您可以执行以下操作,这可能更快:
IPAddress.TryParse(msg.nonTargetIp.TrimEnd(new char[] { '\0' } ), out ip);
Run Code Online (Sandbox Code Playgroud)