C# 二进制在字符串后写入两个空unicode字符

C# 二进制在字符串后写入两个空unicode字符,c#,winforms,binarywriter,C#,Winforms,Binarywriter,因此,我尝试在二进制文件中写入的每个字符串后添加两个0x00,这是我尝试的(每行1次),但我总是在每个字符串后只添加一个0x00: bw.Write(enc.GetBytes(listView1.Items[i].SubItems[1].Text + '\0' + '\0')); bw.Write(enc.GetBytes(listView1.Items[i].SubItems[1].Text + "\0")); bw.Write(enc.GetBytes(listView1.Items[i].

因此,我尝试在二进制文件中写入的每个字符串后添加两个0x00,这是我尝试的(每行1次),但我总是在每个字符串后只添加一个0x00:

bw.Write(enc.GetBytes(listView1.Items[i].SubItems[1].Text + '\0' + '\0'));
bw.Write(enc.GetBytes(listView1.Items[i].SubItems[1].Text + "\0"));
bw.Write(enc.GetBytes(listView1.Items[i].SubItems[1].Text + (new string('\0', 2))));

但它们最终都会得到相同的结果,我是否可以尝试使用另一种Unicode转义?还是我在这方面做错了什么?另请注意,
String enc=Encoding.Unicode

您所做的应该是可行的。此测试代码演示:

string test = "X" + '\0' + '\0';
Console.WriteLine(test.Length); // Prints 3
var bytes = Encoding.Unicode.GetBytes(test);
Console.WriteLine(bytes.Length); // Prints 6
bytes
包含以下字节值:
88,0,0,0,0,0
-这是正确的


因此,我假设您的代码在其他地方有问题。

您所做的应该是可行的。此测试代码演示:

string test = "X" + '\0' + '\0';
Console.WriteLine(test.Length); // Prints 3
var bytes = Encoding.Unicode.GetBytes(test);
Console.WriteLine(bytes.Length); // Prints 6
bytes
包含以下字节值:
88,0,0,0,0,0
-这是正确的


所以我假设你的代码在其他地方出了问题。

是的,你是对的,谢谢,我现在知道我错在哪里了,我真的不知道这在软件中是如何工作的,所以我只发布你的答案和答案,谢谢:)是的,你是对的,谢谢,我现在知道我错在哪里了,我不知道这在软件中是如何工作的,所以我只需发布你的答案和答案,谢谢:)关注阅读此文件的代码。它必然会忽略额外的零,这类代码通常采用C字符串语义。其中单个0终止字符串。尤其是这样,因为这样的代码无法使用任何其他方法来确定字符串中有多少个字符。使用十六进制查看器来获得对代码的信任。关注读取此文件的代码。它必然会忽略额外的零,这类代码通常采用C字符串语义。其中单个0终止字符串。尤其是这样,因为这样的代码无法使用任何其他方法来确定字符串中有多少个字符。使用十六进制查看器来获得对代码的信心。