0

バイナリ値を含むテキスト ファイルがあります。たとえば、ファイル「file.txt」があり、バイナリデータが含まれているとします。たとえば、11001010 このファイルのサイズは8 バイトです。しかし、これらの8 バイトをビット、つまり8 ビットとして読み取り、8 ビットを 1 バイトにする必要があります。どうすればそれができますか?1. バッファを取り、個々の値をバッファに読み込みます。 2. バッファ値が 8 に達したら、それらの 8 ビットを 1 バイトにして、ファイルに書き込みます。

前もって感謝します。

4

3 に答える 3

3

文字列が与えられた場合、私はあなたが望むと思いますConvert.ToByte(text, 2);

1バイト以上の場合、長い文字列をこのようなバイト配列に変換するための組み込みはないと思いますが、Substring必要に応じて繰り返し使用できます。

于 2012-02-24T14:17:40.847 に答える
1

次のコードは、説明したようなテキスト ファイルを読み取ります。ファイルに 8 で割り切れない数の 2 進数が含まれている場合、余分な数字は破棄されます。

using (var fileToReadFrom = File.OpenRead(@"..."))
using (var fileToWriteTo = File.OpenWrite(@"..."))
{
    var s = "";
    while (true)
    {
        var byteRead = fileToReadFrom.ReadByte();
        if (byteRead == -1)
            break;
        if (byteRead != '0' && byteRead != '1')
        {
            // If you want to throw on unexpected characters...
            throw new InvalidDataException(@"The file contains a character other than 0 or 1.");
            // If you want to ignore all characters except binary digits...
            continue;
        }
        s += (char) byteRead;
        if (s.Length == 8)
        {
            fileToWriteTo.WriteByte(Convert.ToByte(s, 2));
            s = "";
        }
    }
}
于 2012-02-24T14:22:54.197 に答える
0

文字ではなくバイトについて話している場合に備えて:

        byte output;
        using (var inFile = File.OpenRead("source"))
        {
            int offset = 0;
            var data = new byte[8];
            while (inFile.Read(data, offset, 8) == 8)
            {
                output = (byte)(data[0] << 7);
                output += (byte)(data[1] << 6);
                output += (byte)(data[2] << 5);
                output += (byte)(data[3] << 4);
                output += (byte)(data[4] << 3);
                output += (byte)(data[5] << 2);
                output += (byte)(data[6] << 1);
                output += (byte)data[7];

                offset += 8;

                // write your output byte
            }
        }
于 2012-02-24T14:53:36.210 に答える