Как прочитать двоичный файл в C #? - PullRequest
27 голосов
/ 11 марта 2010

Я хочу создать метод, который берет любой файл и читает его как массив нулей и единиц, то есть его двоичный код. Я хочу сохранить этот двоичный код в виде текстового файла. Вы можете мне помочь? Благодарю.

Ответы [ 5 ]

49 голосов
/ 11 марта 2010

Быстрая и грязная версия:

byte[] fileBytes = File.ReadAllBytes(inputFilename);
StringBuilder sb = new StringBuilder();

foreach(byte b in fileBytes)
{
    sb.Append(Convert.ToString(b, 2).PadLeft(8, '0'));  
}

File.WriteAllText(outputFilename, sb.ToString());
16 голосов
/ 11 марта 2010

Ну, читать это не сложно, просто используйте FileStream для чтения байта []. Преобразование его в текст на самом деле вообще невозможно или не имеет смысла, если только вы не конвертируете 1 и 0 в гекс Это легко сделать с помощью перегрузки BitConverter.ToString (byte []). Как правило, вы хотите сбросить 16 или 32 байта в каждой строке. Вы можете использовать Encoding.ASCII.GetString (), чтобы попытаться преобразовать байты в символы. Пример программы, которая делает это:

using System;
using System.IO;
using System.Text;

class Program {
    static void Main(string[] args) {
        // Read the file into <bits>
        var fs = new FileStream(@"c:\temp\test.bin", FileMode.Open);
        var len = (int)fs.Length;
        var bits = new byte[len];
        fs.Read(bits, 0, len);
        // Dump 16 bytes per line
        for (int ix = 0; ix < len; ix += 16) {
            var cnt = Math.Min(16, len - ix);
            var line = new byte[cnt];
            Array.Copy(bits, ix, line, 0, cnt);
            // Write address + hex + ascii
            Console.Write("{0:X6}  ", ix);
            Console.Write(BitConverter.ToString(line));
            Console.Write("  ");
            // Convert non-ascii characters to .
            for (int jx = 0; jx < cnt; ++jx)
                if (line[jx] < 0x20 || line[jx] > 0x7f) line[jx] = (byte)'.';
            Console.WriteLine(Encoding.ASCII.GetString(line));
        }
        Console.ReadLine();
    }
}
5 голосов
/ 11 марта 2010

Вы можете использовать BinaryReader , чтобы прочитать каждый из байтов, затем используйте BitConverter.ToString (byte []) , чтобы узнать, как каждый представлен в двоичном формате.

Затем вы можете использовать это представление и записать в файл.

4 голосов
/ 05 мая 2018
using (FileStream fs = File.OpenRead(binarySourceFile.Path))
    using (BinaryReader reader = new BinaryReader(fs))
    {              
        // Read in all pairs.
        while (reader.BaseStream.Position != reader.BaseStream.Length)
        {
            Item item = new Item();
            item.UniqueId = reader.ReadString();
            item.StringUnique = reader.ReadString();
            result.Add(item);
        }
    }
    return result;  
4 голосов
/ 11 марта 2010

Используйте простой FileStream.Read, затем напечатайте его с Convert.ToString(b, 2)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...