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的最快方法(如果字符串大于定义的长度,则应该修剪字符串,如果字符串大小较小,则剩余的字符将填充为false)然后将这两个字符串放在一起并将其写入二进制文件中。
编辑: @dtb:一个简单的例子就像这个value1 =“A”,value2 =“B”,length1 = 8和length2 = 16,结果将是010000010000000001000010 前8位来自“A”,后16位来自“B”
答案 0 :(得分:0)
将字符串转换为其他内容时,您需要考虑要使用的编码。这是一个使用UTF-8的版本
bitValue1 = System.Text.Encoding.UTF8.GetBytes(value1, 0, length1);
修改强> 嗯......看到你正在寻找BitArray而不是ByteArray,这对你来说可能没有用。
答案 1 :(得分: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(); }
这是你想要实现的目标吗?
希望这有帮助, 最好的祝福, 汤姆。
答案 2 :(得分: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这是问号。