2011-04-15 2 views
1

У меня есть переменная SizeOfData из byte[4], которая возвращает:Как я могу определить пустую строку, если его содержимое 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

Лучше, в каком смысле? Любой из них выйдет, как только условие будет нарушено (первый вариант) или выполнено (второй вариант). –

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 
} 

Однако, похоже, вам нужно что-то более устойчивое и что-то, что может работать на струнах. Вы можете использовать простой RegEx заменить диапазон непечатаемых символов Unicode (исходную строку, как в ASCII, я знаю, но как только вы разобрать его, что хранится внутри, как UTF-16):

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

На этом точка, string.IsNullOrEmpty(yourString) должен вернуть true.

Смежные вопросы