2009-09-28 71 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"中所示。