我通過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
尾部字符是反斜槓還是空字符? –