バイナリ ファイルから文字列を読み取っています。各文字列は null で終了します。エンコーディングはUTF-8です。Python では、単純にバイトを読み取り、それが 0 かどうかを確認し、それをバイト配列に追加し、0 が表示されるまでバイトの読み取りを続けます。次に、バイト配列を文字列に変換して次に進みます。すべての文字列が正しく読み取られました。
これを C# で読むにはどうすればよいですか? 配列は固定サイズであるため、単純に配列にバイトを追加する余裕はないと思います。
バイナリ ファイルから文字列を読み取っています。各文字列は null で終了します。エンコーディングはUTF-8です。Python では、単純にバイトを読み取り、それが 0 かどうかを確認し、それをバイト配列に追加し、0 が表示されるまでバイトの読み取りを続けます。次に、バイト配列を文字列に変換して次に進みます。すべての文字列が正しく読み取られました。
これを C# で読むにはどうすればよいですか? 配列は固定サイズであるため、単純に配列にバイトを追加する余裕はないと思います。
以下はあなたが探しているものをあなたに与えるはずです。すべてのテキストは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;
}
}
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 );
}
}
次のいずれかを使用できます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();