2014-12-29 1 views
-3

Я задаю простой вопрос, но я не могу найти самый простой способ сделать это, мое приложение прочитало небольшой файл , Просто 8 байт слово «закачано» читать только 8 байт файла, будет бинарным массив 0,1 ... или список истинного ложного и длина 8 * 8 = 64 бит, ТЕПЕРЬ У меня уже есть эти 64 бита в массиве строк, а также список Boolean, код ниже быстрее, и мне просто нужно отредактировать код, чтобы дать мне 8 бит в течение времени, а не 1 байт. **** с MemoryStreamПреобразуйте массив из массива «true, false» или «0» в байтовый массив, затем напишите его как файл

string path = openFileDialog1.FileName; 
byte[] file = File.ReadAllBytes(path); 
MemoryStream memory = new MemoryStream(file); 
BinaryReader reader = new BinaryReader(memory); 

for (int i = 0; i <= file.Length - 1; i++) 
{ 

byte result = reader.ReadByte(); 

} 

После редактирования этого кода, я просто нужно написать назад этот бит

01110101-01110000-01101100-01101111-01100001-01100100-01100101-01100100 быть загружены

в байты, затем запишите его в действительный файл. ?? я действительно устал, потому что я вижу много методов для написания байтового массива как файла, но не бит ... Я устал, потому что я не могу найти выход!

+0

возможно [BitArray] (http://msdn.microsoft.com/en-us/library/system.collections.bitarray (v = vs.110) .aspx) - то, что вам нужно – Grundy

+0

Байт * is * 8 бит. Если вам нужен каждый бит байта, по одному за раз, вы можете использовать «битаррей» или использовать побитовые операторы, но ваш вопрос как написанный неясен. Также не кажется, что вы используете «MemoryStream» и «BinaryReader» из того, что вы опубликовали. –

+0

как я могу сделать что-то вроде BinaryWriter.Write(), но в bitArray –

ответ

0

Вы можете использовать BitArray constructor accepting a byte array:

var bitArray = new BitArray(new byte[] { result }); 

Тогда вы можете позвонить bitArray.Get(n), чтобы получить немного в положении n от result байта.

Как для редактирования, код может быть сведена к следующим образом:

string output = ""; 
byte[] fileBytes = File.ReadAllBytes(path); 
var bitArray = new BitArray(fileBytes); 

// Loop over all bits in the bitarray, containing all bytes read from the file. 
for (int i = 0; i < bitArray.Length; i++) 
{ 
    output += bitArray.Get(i) ? "1" : "0"; 

    // Output a dash every 8 characters. 
    if ((i + 1) % 8 == 0) 
    { 
     output += "-" 
    } 
} 

// Write `output` string to file. 
+0

Действительно Большое вам спасибо за вашу помощь, так что я думаю, правда? У меня уже есть код выше, чтобы читать байты каждый раз .. тогда мне просто нужно сравнить биты, а затем прочитать еще один байт, как я могу отменить BACK массив бит, чтобы быть байтом, а затем записать биты, которые я прочитал как действительные файл?? –

+0

Я не знаю, какой-то пример ввода и вывода (в вашем вопросе, а не в комментарии) действительно поможет. – CodeCaster

+0

Еще раз спасибо за вашу помощь, но мне нужен массив из 64 бит, поэтому после завершения чтения всех байтов. я получу bitArray из 64 ?? или только последний байт? –