C#从IP地址字符串中删除尾随'\ 0'

时间:2011-07-13 17:40:34

标签: 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";

我应该如何将其解析为IPAddress?如果我这样做,

IPAddress.TryParse(msg.nonTargetIP.Trim(), out ip);

无法解析。

删除那些尾随空值的最简单方法是什么?

6 个答案:

答案 0 :(得分:14)

其他示例向您展示了如何修剪字符串 - 但最好不要让“坏”数据开始。

我的猜测就是你有这样的代码:

// Bad code
byte[] data = new byte[8192];
stream.Read(data, 0, data.Length);
string text = Encoding.ASCII.GetString(data);

这忽略了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);

请注意,您应检查流是否已关闭,并且不要假设您能够在一次调用Read时读取所有数据,或者在另一端拨打Write对应一次拨打Read

当然完全有可能根本不是这样 - 但你应该检查另一端是否尝试在数据末尾发送这些额外的“空”字节。听起来不太可能。

答案 1 :(得分:13)

IPAddress.TryParse(msg.nonTargetIp.Replace("\0", String.Empty).Trim(), out ip);

或者阅读Trim(),您可以执行以下操作,这可能更快:

IPAddress.TryParse(msg.nonTargetIp.TrimEnd(new char[] { '\0' } ), out ip);

答案 2 :(得分:5)

str = str.Replace("\0","");应该可以正常工作。

答案 3 :(得分:4)

与Replace方法相比,Trim方法更有效。

msg.nonTargetIP.Trim(new [] { '\0' });

答案 4 :(得分:1)

您可以尝试使用字符串替换而不是修剪:

IPAddress.TryParse(msg.nonTargetIP.Replace("\0", ""), out ip);

答案 5 :(得分:1)

只需使用TrimEnd()

bool isIPAddress = IPAddress.TryParse(msg.nonTargetIP.nonTargetIP.TrimEnd('\0'), out ip);

但请注意,您提供的示例包含非法IP地址,并且无论如何都不会成功解析(300> 255,每个十进制数必须在2到255之间)。