读取以null结尾的字符串

MxL*_*evs 7 c#

我正在从二进制文件中读取字符串.每个字符串都以空值终止.编码是UTF-8.在python中,我只读取一个字节,检查它是否为0,将其附加到字节数组,然后继续读取字节,直到看到0.然后我将字节数组转换为字符串并继续.所有字符串都被正确读取.

我怎样才能在C#中读到这个?我不认为我只是简单地将字节附加到数组,因为数组是固定大小的.

loo*_*ode 8

以下应该可以满足您的需求.所有文本都应该在myText列表中.

var data = File.ReadAllBytes("myfile.bin");
List<string> myText = new List<string>();
int lastOffset = 0;
for (int i = 0; i < data.Length; i++)
{
    if (data[i] == 0)
    {
        myText.Add(System.Text.Encoding.UTF8.GetString(data, lastOffset, i - lastOffset));
        lastOffset = i + 1;
    }
}
Run Code Online (Sandbox Code Playgroud)


Nas*_*ine 2

您可以使用List<byte>

List<byte> list = new List<byte>();
while(reading){ //or whatever your condition is
    list.add(readByte);
}

string output = Encoding.UTF8.GetString(list.ToArray());
Run Code Online (Sandbox Code Playgroud)

或者你可以使用StringBuilder

StringBuilder builder = new StringBuilder();

while(reading){
    builder.Append(readByte);
}

string output = builder.ToString();
Run Code Online (Sandbox Code Playgroud)

  • -1:StringBuilder 不会[追加](http://msdn.microsoft.com/en-us/library/86yy043k.aspx) 字节的字符值,而是追加字节的整数值。 (10认同)