C#删除尾部'';来自IP地址字符串

本文关键字:IP 地址 字符串 来自 删除 尾部 | 更新日期: 2023-09-27 18:02:13

我通过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);

它无法解析。

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

C#删除尾部'�';来自IP地址字符串

其他示例已经向您展示了如何修剪字符串,但最好不要从一开始就得到"坏"数据。

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

// 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的一次呼叫。

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

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

或者在Trim((上阅读,你可以做以下可能更快的事情:

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

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

Trim方法比Replace方法更有效。

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

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

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

可以仅为此使用TrimEnd()

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

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