2011-04-15 83 views
1

我有byte[4]一個SizeOfData變量返回:如何確定一個空字符串時,它的內容是 0 0 0 0

byte[0] == 0 
byte[1] == 0 
byte[2] == 0 
byte[3] == 0 

當我做Encoding.ASCII.GetString(SizeOfData)字符串變量的長度爲4, String.IsNullOrEmpty()返回false,但是當我查看Visual Studio中的字符串時,其中沒有任何內容。

如何確定它是否包含所有\ 0 \ 0 \ 0 \ 0,然後執行X else Y?

回答

4

LINQ魔術

if (bytes.All(b => b == 0)) 

或略好

if (bytes.Any(b => b != 0)) 
+1

更好的是什麼意思?一旦違反條件(第一選項)或滿足條件(第二選項),任何一個都將退出。 – 2011-04-15 13:31:10

1

一點點轉換爲字符串之前還是可以:

bool isNulls = SizeOfData.All(x => x == 0); 
0

如果你能更早處理它,你可以檢查字節數組:

if(SizeOfData.Any(b => b != 0)) 
    // do something 
else 
    // do something else 
2

,當我看着在Visual Studio中的字符串沒有什麼它

你的意思,我假設,就是當你將鼠標懸停在調試器中的字符串(或添加手錶,或者檢查當地人,或以其他方式查看字符串的視覺表示)看起來是空的。這是因爲\0與其他字符一樣,是不可打印的字符。這些角色在那裏,但不會產生視覺效果。

如果要確定是否字節數組僅僅是零,這是簡單的:

(請注意,上面的數組名是無效的,所以我要叫它data

if(data.Add(b => b == 0)) 
{ 
    // is only null characters 
} 

但是,看起來你想要一些更強大的東西,以及可以在字符串上工作的東西。您可以使用一個簡單的正則表達式來代替不可打印Unicode字符範圍內(原來的字符串作爲ASCII,我知道,但一旦你分析它,它的內部存儲爲UTF-16):

yourString = Regex.Replace(yourString, "[\x00-\x1F]", ""); 

在這點,string.IsNullOrEmpty(yourString)應返回true

相關問題