Frage

string value1 , value1 ;
int length1 , length2 ;
System.Collections.BitArray bitValue1 = new System.Collections.BitArray(Length1);
System.Collections.BitArray bitValue2 = new System.Collections.BitArray(Length2);

Ich bin auf der Suche nach dem schnellsten Weg für jede Saite jede Saite zu BitArray mit definierter Länge, verdeckte (die Zeichenkette gekürzt werden soll, wenn es größer als definierte Länge ist und wenn Strings Größe kleine verbleibenden Bits wird mit falschem gefüllt werden) und dann setzt diese zwei Saiten zusammen und schreibt sie in einer Binärdatei.

Edit: @dtb: Ein einfaches Beispiel kann wie folgt sein Wert1 = „A“, Wert2 = „B“ und length1 = 8 und length2 = 16, und das Ergebnis wird 010000010000000001000010 die ersten 8 Bits von "A" und die nächsten 16 Bits von "B"

War es hilfreich?

Lösung

        //Source string
        string value1 = "t";
        //Length in bits
        int length1 = 2;
        //Convert the text to an array of ASCII bytes
        byte[] bytes = System.Text.Encoding.ASCII.GetBytes(value1);
        //Create a temp BitArray from the bytes
        System.Collections.BitArray tempBits = new System.Collections.BitArray(bytes);
        //Create the output BitArray setting the maximum length
        System.Collections.BitArray bitValue1 = new System.Collections.BitArray(length1);
        //Loop through the temp array
        for(int i=0;i<tempBits.Length;i++)
        {
            //If we're outside of the range of the output array exit
            if (i >= length1) break;
            //Otherwise copy the value from the temp to the output
            bitValue1.Set(i, tempBits.Get(i));                
        }

Und ich werde es immer wieder sagen, nimmt diese ASCII-Zeichen so etwas über ASCII 127 (wie das é in Resümee) wird ausflippen und wahrscheinlich zurückkehren ASCII 63, die das Fragezeichen ist.

Andere Tipps

Wenn eine Zeichenfolge in etwas umzuwandeln sonst müssen Sie überlegen, was kodieren, die Sie verwenden möchten. Hier ist eine Version, die verwendet UTF-8

bitValue1 = System.Text.Encoding.UTF8.GetBytes(value1, 0, length1);

Bearbeiten Hmm ... sah, dass Sie suchen eine BitArray und kein ByteArray, dies wird Ihnen wahrscheinlich nicht helfen.

Da dies nicht eine ganz klare Frage ist, werde ich diese einen Schuss dennoch,

using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
public static void RunSnippet()
{
   string s = "123";
   byte[] b = System.Text.ASCIIEncoding.ASCII.GetBytes(s);
   System.Collections.BitArray bArr = new System.Collections.BitArray(b);
   Console.WriteLine("bArr.Count = {0}", bArr.Count);
   for(int i = 0; i < bArr.Count; i++)
    Console.WriteLin(string.Format("{0}", bArr.Get(i).ToString()));
   BinaryFormatter bf = new BinaryFormatter();
   using (FileStream fStream = new FileStream("test.bin", System.IO.FileMode.CreateNew)){
    bf.Serialize(fStream, (System.Collections.BitArray)bArr);
    Console.WriteLine("Serialized to test.bin");
   }
   Console.ReadLine();
}

Ist das, was Sie erreichen wollen?

Hope, das hilft, Freundliche Grüße, Tom.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top