2009-09-28 14 views
10

Mam wymóg utworzenia pliku dziennika sysDesk. W tym celu mam utworzyć plik XML, który w pewnych miejscach pomiędzy elementami zawiera binarny pusty znak.Co to jest binarny pusty znak?

Czy ktoś może mi wyjaśnić, po pierwsze, czym jest binarny pusty znak i jak mogę napisać jeden do pliku tekstowego?

+0

Aby wyjaśnić, chcesz, aby był to jakiś specjalny typ pliku i _nie_ dobrze sformatowany plik XML? –

+0

@Henk, struktura wygląda jak XML, ale zostanie przetrawiona przez SyDesk, więc myślę, że masz rację, to nie będzie dobrze uformowane. –

Odpowiedz

26

Podejrzewam, że to oznacza Unicode U + 0000. Jednak jest to not a valid character in an XML file ... powinieneś zobaczyć, czy możesz uzyskać bardzo przejrzystą specyfikację formatu pliku, aby ustalić, co jest rzeczywiście wymagane. Przykładowe pliki będzie również przydatny :)

Komentarze zawodzą mnie w tej chwili, tak aby rozwiązać kilka innych odpowiedzi:

  • To nie jest znak kończący ciąg w C#, jak C# nie używaj łańcuchów zakończonych znakiem NUL. W rzeczywistości, wszystkie ciągi .NET zakończone przez null ze względu na współdziałanie, ale co ważniejsze, długość jest przechowywana niezależnie. W szczególności, C# ciąg może całkowicie ważnie zawierać znak null bez wypowiedzenia go:

    string embeddedNull = "a\0b"; 
    Console.WriteLine(embeddedNull.Length); // Prints 3 
    
  • Metoda podana przez rwmnau na uzyskanie zerowej znak lub ciąg znaków jest bardzo nieefektywne czegoś prostego. Lepsze byłoby:

    string justNullString = "\0"; 
    char justNullChar = '\0'; 
    
+0

Witaj Jon, jeśli masz szansę, czy to znaczy, że nie muszę jawnie definiować terminatora o wartości NULL, ponieważ wszystkie ciągi C# są już zakończone znakiem null? –

+1

JL: Ciągi C# kończą się zerem * w pamięci * ze względu na współdziałanie (przynajmniej w MS CLR), ale nie są one zakończone znakiem null pod względem znaków, które można uzyskać. Niezależnie od tego, czy jednoznacznie trzeba zdefiniować, czy nie, zależy to od tego, co próbujesz zrobić - jeśli próbujesz ograniczyć ciągi znaków, potrzebujesz * pewnego rodzaju ogranicznika. –

10

binarny znak null jest tylko char z wartością całkowitą/ASCII 0.

Można utworzyć pusty znak z Convert.ToChar(0) lub częstsze, bardziej dobrze rozpoznany '\0'.

+0

Lub po prostu 'var x = (char) 0;'; –

2

Znak binarny NULL to taki, który jest zerowy (0x00 w hex). Możesz napisać:

System.Text.Encoding.ASCII.GetChars(new byte[] {00}); 

, aby uzyskać go w języku C#.

2

zerowa postać jest szczególna postać, która jest reprezentowana przez U + 0000 (zakodowane przez wszystkie zera bitów). Znak null jest reprezentowany w języku C# przez sekwencję specjalną \0, jak w "This string ends with a null character.\0".