我通过TCP套接字接收到一个字符串。这个字符串看起来像这样:C#从IP地址字符串中删除尾部' 0'
str = "10.100.200.200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
我应该如何解析这个IP地址?如果我这样做,
IPAddress.TryParse(msg.nonTargetIP.Trim(), out ip);
它无法解析。
什么是最简单的方法来删除那些尾随null?
我通过TCP套接字接收到一个字符串。这个字符串看起来像这样:C#从IP地址字符串中删除尾部' 0'
str = "10.100.200.200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
我应该如何解析这个IP地址?如果我这样做,
IPAddress.TryParse(msg.nonTargetIP.Trim(), out ip);
它无法解析。
什么是最简单的方法来删除那些尾随null?
你可以尝试的字符串替换,而不是微调的:
IPAddress.TryParse(msg.nonTargetIP.Replace("\0", ""), out ip);
str = str.Replace("\0","");
应该只是罚款。
裁剪方法相比,替换方法更有效。
msg.nonTargetIP.Trim(new [] { '\0' });
其他示例向您展示了如何修剪字符串 - 但最好不要让“坏”数据开始。
我猜测是,你有这样的代码:
// 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
的一个呼叫。
当然,完全有可能根本不是这种情况 - 但是您应该真的检查另一端是否尝试在数据末尾发送这些额外的“空”字节。这听起来不太可能。
您可以只使用此TrimEnd()
:但你给的例子中包含非法IP地址,永远不会成功解析无论
bool isIPAddress = IPAddress.TryParse(msg.nonTargetIP.nonTargetIP.TrimEnd('\0'), out ip);
注(300> 255,每一个十进制数必须是在2到255的范围内)。
是否曾经有过在第一个'\'之前会有数据需要保留的情况? – MoarCodePlz
尾部字符是反斜杠还是空字符? –