С# — обрезка строки от первого нулевого терминатора и далее

У меня есть строка С# «RIP-1234-STOP\0\0\0\b\0\0\0???|B?Mp?\0\0\0», возвращенная из вызова собственного драйвера.

Как я могу обрезать все символы, начиная с первого нулевого терминатора '\0\ и далее. В этом случае я просто хотел бы иметь «RIP-1234-STOP».

Спасибо.


person david.healed    schedule 10.09.2009    source источник


Ответы (3)


Вот метод, который должен помочь

string TrimFromZero(string input)
{
  int index= input.IndexOf('\0');
  if(index < 0)
    return input;

  return input.Substring(0,index);
}
person aaronb    schedule 10.09.2009
comment
+1 за единственный ответ, который не злоупотребляет ключевым словом var. - person Guffa; 10.09.2009
comment
Хороший метод конечно. Трудно поверить, что это было бы ЛЮБЫМ менее читабельным с «var» вместо «int». - person RKitson; 10.09.2009

Попробуй это:

var input = "RIP-1234-STOP\0\0\0\b\0\0\0???|B?Mp?\0\0\0";
var firstNull = input.IndexOf('\0');
var output = input.Substring(0, firstNull);

или просто:

var output = input.Substring(0, input.IndexOf('\0'));
person Luke Quinane    schedule 10.09.2009
comment
Конечно, если '\0' не найдено, это решение вызовет исключение ArgumentOutOfRangeException. - person RKitson; 10.09.2009

Это тоже работает:

var input = "RIP-1234-STOP\0\0\0\b\0\0\0???|B?Mp?\0\0\0";
var split = input.Split('\0');
var output = split[0];
Assert.AreEqual("RIP-1234-STOP", output);
person RKitson    schedule 10.09.2009