7

バイナリ ファイルから文字列を読み取っています。各文字列は null で終了します。エンコーディングはUTF-8です。Python では、単純にバイトを読み取り、それが 0 かどうかを確認し、それをバイト配列に追加し、0 が表示されるまでバイトの読み取りを続けます。次に、バイト配列を文字列に変換して次に進みます。すべての文字列が正しく読み取られました。

これを C# で読むにはどうすればよいですか? 配列は固定サイズであるため、単純に配列にバイトを追加する余裕はないと思います。

4

4 に答える 4

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;
    }
}
于 2012-07-29T23:45:29.063 に答える
3

StreamReaderインスタンスを使用していると仮定します。

StringBuilder sb = new StringBuilder();
using(StreamReader rdr = OpenReader(...)) {
    Int32 nc;
    while((nc = rdr.Read()) != -1) {
          Char c = (Char)nc;
          if( c != '\0' ) sb.Append( c );
    }
}
于 2012-07-29T23:46:37.093 に答える
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());

StringBuilderまたは、 :を使用することもできます

StringBuilder builder = new StringBuilder();

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

string output = builder.ToString();
于 2012-07-29T23:44:46.493 に答える