什么是二进制空字符?

14

我有一个需求需要创建一个系统日志文件。在这个需求中,我需要创建一个XML文件,在其中某些元素之间包含二进制空字符。

请问有人可以解释一下,什么是二进制空字符,以及如何将其写入文本文件中吗?


只是想澄清一下,您希望它成为某种特殊的文件类型,而不是一个格式良好的XML文件吗? - H H
@Henk,这个结构看起来像XML,但它将被SyDesk消化,所以我认为你是正确的,它不会被良好地格式化。 - JL.
4个回答

33
我怀疑它是指Unicode U+0000。然而,在XML文件中,这不是有效的字符...你应该尝试获取文件格式的非常清晰的规范,以确定实际需要的内容。样本文件也会很有用 :)
评论目前无法帮助我,因此要解决其他答案中的一些问题:
- 它不是C#中的字符串终止字符,因为C#不使用以null结尾的字符串。实际上,为了Interop,所有.NET字符串都是以null结尾的,但更重要的是长度是单独存储的。特别地,C#字符串可以完全有效地包括一个空字符而不终止它:
string embeddedNull = "a\0b";
Console.WriteLine(embeddedNull.Length); // Prints 3
  • rwmnau提供的获取null字符或字符串的方法对于简单的任务来说非常低效。更好的方法是:

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

    嗨Jon,如果你有机会的话,这是否意味着我不需要显式定义空终止符,因为所有的C#字符串已经是空终止的了? - JL.
    1
    JL:就互操作而言,C#字符串在内存中恰好是以空字符结尾的(至少在MS CLR上是这样),但从实际可访问的字符来看,它们并不以空字符结尾。是否需要显式定义取决于您要做什么 - 如果您要分隔字符串,则需要某种分隔符。 - Jon Skeet

    15

    二进制空字符就是一个整数/ASCII值为0的字符。

    你可以使用Convert.ToChar(0)或更常见、更易识别的'\0'来创建一个空字符。


    或者只需使用 var x = (char)0; - Orion Edwards

    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"


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接