speichern String-Array im Binärformat
-
21-09-2019 - |
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"
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.