Question

Nous avons un fichier texte contenant des valeurs binaires. Disons que nous avons un fichier "file.txt", il contient Binary Datat, disons 11001010La taille de ce fichier est 8 octets. Mais nous voulons ces 8 octets être lu comme des bits c'est-à-dire 8 bits et ainsi faire 8 bits en 1 octet. Comment pouvons-nous le faire? Nous connaissons simplement la procédure: 1. Prenez un tampon et lisez la valeur individuelle dans le tampon 2. Si la valeur du tampon atteint 8, faites de ces 8 bits dans un octet et écrivez dans un fichier.

Merci d'avance.

Était-ce utile?

La solution

Le code suivant lit un tel fichier texte que vous décrivez. Si le fichier contient un certain nombre de chiffres binaires qui ne sont pas divisibles par 8, les chiffres étrangers sont jetés.

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 = "";
        }
    }
}

Autres conseils

Étant donné une chaîne, je soupçonne que tu veux Convert.ToByte(text, 2);

Pour plus d'un seul octet, je ne pense pas qu'il y ait quelque chose intégré pour convertir une longue chaîne en un tableau d'octets comme celui-ci, mais vous pouvez utiliser Substring À plusieurs reprises si vous le souhaitez.

Juste au cas où nous parlons d'octets et non de caractères:

        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
            }
        }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top