computerpublic Ответов: 1

Я пытаюсь преобразовать логический массив в байт


<pre>// I AM TRYING CONVERT A BOOLEAN ARRAY (WITH 8 VALUES) TO A BYTE
// I AM ALSO TRYING TO WRITE THE CONVERTED BYTE TO A FILE.
using System;
using System.IO;
using System.Collections;
namespace Applica
{
    static class Program
    {
        static void Main(string[] args)
        {
            byte val;
            bool tif = true;
            bool[] array = new bool[8];
            const int BufferSize = 1024;
            byte[] buffer = new byte[BufferSize];
            FileInfo ap = new FileInfo("tempii.txt");
            string filePath = ap.FullName;
            string destinationPath = Path.Combine("C:\\check", Path.GetFileName(filePath));
            using (Stream output = File.OpenWrite(destinationPath))
            {
                int bytes = 1;
                while (bytes > 0)
                {
                    for (int i = 0; i < 8; i++)
                    {
                        if (tif == true)
                        {
                            tif = false;
                        }
                        else if (tif == false)
                        {
                            tif = true;
                        }
                        array[i] = tif;
                        if (i == 7)
                        {
                            val = Convert.ToByte(array);//Unable to cast object of type 'System.Boolean[]' to type 'System.IConvertible'
                        }
                    }
                    output.Write(buffer, 0, bytes);// I WANT TO WRITE "VAL" TO OUTPUT FILE.
                }
            }
        }
    }
}






Что я уже пробовал:

У меня возникли проблемы с последними двумя строками кода. Я пытаюсь преобразовать логический массив с 8 значениями в байт. Затем я пытаюсь записать преобразованный байт в файл.

1 Ответов

Рейтинг:
0

Dave Kreskowiak

Вы можете отказаться от большого количества этого кода просто используя BitArray для выполнения преобразования:

bool[] array = new bool[8];
array[1] = true;
array[3] = true;
array[6] = true;
array[7] = true;

BitArray bytes = new BitArray(array);
byte[] byteArray = new byte[1];

bytes.CopyTo(byteArray, 0);

// byteArray[0] now has the value 0xCA

Затем вы можете записать массив байтов в файл, хотя это не будет текст, поэтому я не знаю, почему вы пытаетесь использовать текстовый файл.

Вы даже можете просто пропустить типа bool[] массив, и просто использовать типа bitarray, чтобы вместить все значения типа bool.
BitArray bits = new BitArray(8);   // Holds 8 bits
bits[1] = true;
bits[3] = true;
bits[6] = true;
bits[7] = true;

byte[] byteArray = new byte[1];
bits.CopyTo(byteArray, 0);


computerpublic

//Ошибки компилятора не происходит, но это дает мне большой пустой выходной файл, который продолжает строиться
//Также программа не заканчивается.

использование системы;
использование системы.ИО;
использование системы.Коллекции;
приложение пространства имен
{
программа статического класса
{
static void Main(string[] args)
{
боол срок действия = правда;
bool[] array = новый bool[8];
BitArray bytes = новый BitArray(массив);
const int BufferSize = 1024;
byte[] buffer = новый байт[BufferSize];
FileInfo ap = новый FileInfo("tempii.txt");
строку путь к файлу = АП.Полное имя;
строка destinationPath = путь.Объединить("C:\\check", Путь.GetFileName(путь_к_файлу));
using (Stream output = File.OpenWrite(destinationPath))
{
int amount = 1;
в то время как (сумма > 0)
{
for (int i = 0; i < 8; i++)
{
if (tif == true)
{
срок действия = ложь;
}
else if (tif == false)
{
срок действия = правда;
}
массив[i] = tif;
}
байты.CopyTo(buffer, 0);//ошибки компилятора не происходит, но это дает мне большой пустой выходной файл, который продолжает расти.
выход.Write(buffer, 0, amount);//также программа не заканчивается.
}
}
}
}
}

Dave Kreskowiak

МММ...вам не нужен весь блок "while" в вашем коде. Буфер, который вы создали, содержит все данные, которые должны быть записаны в файл, и вы можете сделать это с помощью одной строки кода внутри вашего блока "using".

    using (Stream output = File.OpenWrite(destinationPath))
    {
        output.Write(buffer, 0, buffer.Count);
    }

Конечно, две строки кода, которые вы помещаете внизу, должны быть перемещены выше записи в файл, чтобы он имел какой-либо смысл.

Серьезно, научитесь пользоваться отладчиком! Это поможет вам понять, что делает код!