2010-01-20 4 views
0
string value1 , value1 ; 
int length1 , length2 ; 
System.Collections.BitArray bitValue1 = new System.Collections.BitArray(Length1); 
System.Collections.BitArray bitValue2 = new System.Collections.BitArray(Length2); 

Я ищу самый быстрый способ для преобразования каждой строки в BitArray с определенной длиной для каждой строки (строка должна быть обрезана, если она больше определенной длиной, и если размер строк меньшие оставшиеся биты будут заполнены ложью), а затем поместите эти две строки вместе и напишите их в двоичном файле.сохранить массив строк в двоичном формате

Редактировать: @dtb: простой пример может быть, как это значению1 = «A», значение2 = «B» и length1 = 8 и длина2 = 16, и результат будет 010000010000000001000010 первые 8 битов из " A "и следующие 16 бит из" B "

+0

Зачем вам нужен BitArray? – dtb

+0

Мне не нужен битаррей, если есть другой способ. но считайте, что длина может быть любым числом (возможно, 2 бита) – Asha

+0

Каково содержание строки? Не могли бы вы приложить какой-то код, чтобы больше объяснить, что вы пытаетесь достичь для нас? – t0mm13b

ответ

0
 //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));     
     } 

И я буду продолжать говорить это, это предполагает, что ASCII символы, так что выше ASCII 127 (например, как é в Возобновить) будет урод, и, возможно, вернуть ASCII 63, который является знаком вопроса.

+0

Спасибо, cheris Я немного изменил код, и теперь он работает хорошо. BTW Я нашел это, что может помочь другим, кто хочет сохранить двоичные данные: http://www.codeproject.com/KB/cs/bitstream.aspx – Asha

0

При преобразовании строки в нечто другое вам нужно рассмотреть, какую кодировку вы хотите использовать. Вот версия, которая использует UTF-8

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

Редактировать Хм ... видел, что вы ищете BitArray и не ByteArray, это не поможет вам, вероятно.

+0

длина 1 - это количество бит. – Asha

0

Поскольку это не очень ясный вопрос я дам этому выстрел, тем не менее,

 
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(); 
} 

Это то, что вы пытаетесь достичь?

Надеюсь, это поможет, С уважением, Tom.

Смежные вопросы