2009-09-28 110 views
10

我有一個要求來創建一個sysDesk日誌文件。在這個要求中,我應該創建一個XML文件,在元素之間的某些地方包含一個二進制空字符。什麼是二進制空字符?

有人可以請我解釋一下,首先是什麼是二進制空字符,我怎樣才能寫一個文本文件?

+0

只是爲了澄清,你希望它是一些特殊的文件類型和_not_一個格式良好的XML文件? – 2009-09-28 16:51:02

+0

@亨克,結構看起來像XML,但它將被SyDesk消化,所以我認爲你是正確的,它不會很好地形成。 – 2009-09-28 16:56:43

回答

26

我懷疑它的意思是Unicode U + 0000。然而,這是not a valid character in an XML file ......你應該看看你是否可以得到一個非常清晰的文件格式規範來確定實際需要的東西。示例文件也將是有益的:)

評論都沒有我的那一刻,所以解決了幾個其他的答案:

  • 這不是在C#中的字符串終止字符,如C#不使用以null結尾的字符串。實際上,所有的.NET字符串都是爲了互操作而以空終止的,但更重要的是長度是獨立存儲的。特別地,C#字符串可以完全有效包括一個空字符而不終止它:

    string embeddedNull = "a\0b"; 
    Console.WriteLine(embeddedNull.Length); // Prints 3 
    
  • 通過rwmnau用於獲取一個空字符或字符串中給出的方法是簡單的東西非常低效的。更好的方式是:

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

嗨,喬恩,如果你有機會,這是否意味着我不需要明確定義一個空終止符,因爲所有的C#字符串已經是空的終止? – 2009-10-21 16:34:22

+1

JL:爲了interop(至少在MS CLR上),C#字符串碰巧在內存中是空終止*,但它們不是以您實際可以獲得的字符爲終止的。無論你是否明確需要定義一個,取決於你想要做什麼 - 如果你試圖分隔字符串,你需要*某種分隔符。 – 2009-10-21 16:51:14

10

二進制空字符僅僅是一個0

的整數/ ASCII值字符您可以創建一個Convert.ToChar(0)空字符或更常見,更公認的好'\0'

+0

或者只是'var x =(char)0;'; – 2013-01-07 01:22:46

2

二進制NULL字符是全零(十六進制中的0x00)。你可以寫:

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

得到它在C#中。

2

空字符是可以被U + 0000(由全零位編碼)所代表的特殊字符。空字符在C#中由轉義序列\0表示,如"This string ends with a null character.\0"中所示。