如何将一串位转换为字节数组

我有一个表示位的字符串,例如:

"0000101000010000" 

我想将其转换为获取字节数组,例如:

 {0x0A, 0x10} 

字节数是可变的,但总是会有填充以形成每字节8位(因此1010变为000010101)。

使用内置的Convert.ToByte()并读取8个字符的块,而不重新发明的东西..

除非这可以教你关于按位操作的东西。

更新:


从Adam那里偷东西(可能过度使用LINQ。这可能过于简洁,正常的循环可能会更好,这取决于你自己(以及你的同事的!)偏好):

 public static byte[] GetBytes(string bitString) { return Enumerable.Range(0, bitString.Length/8). Select(pos => Convert.ToByte( bitString.Substring(pos*8, 8), 2) ).ToArray(); } 
 public static byte[] GetBytes(string bitString) { byte[] output = new byte[bitString.Length / 8]; for (int i = 0; i < output.Length; i++) { for (int b = 0; b <= 7; b++) { output[i] |= (byte)((bitString[i * 8 + b] == '1' ? 1 : 0) << (7 - b)); } } return output; } 

这是一个快速而直接的解决方案(我认为它将满足您的所有要求): http : //vbktech.wordpress.com/2011/07/08/c-net-converting-a-string-of-bits-to-一个字节的arrays/

这应该得到你的答案: 我如何将位转换为字节?

您可以将您的字符串转换为类似于该文章的数组,并从那里使用相同的逻辑来执行转换。

以八个为一组获取characers,并解析为一个字节:

 string bits = "0000101000010000"; byte[] data = Regex.Matches(bits, ".{8}").Cast() .Select(m => Convert.ToByte(m.Groups[0].Value, 2)) .ToArray(); 
 private static byte[] GetBytes(string bitString) { byte[] result = Enumerable.Range(0, bitString.Length / 8). Select(pos => Convert.ToByte( bitString.Substring(pos * 8, 8), 2) ).ToArray(); List mahByteArray = new List(); for (int i = result.Length - 1; i >= 0; i--) { mahByteArray.Add(result[i]); } return mahByteArray.ToArray(); } private static String ToBitString(BitArray bits) { var sb = new StringBuilder(); for (int i = bits.Count - 1; i >= 0; i--) { char c = bits[i] ? '1' : '0'; sb.Append(c); } return sb.ToString(); } 

你可以去下面的任何一个,

  byte []bytes = System.Text.Encoding.UTF8.GetBytes("Hi"); string str = System.Text.Encoding.UTF8.GetString(bytes); byte []bytesNew = System.Convert.FromBase64String ("Hello!"); string strNew = System.Convert.ToBase64String(bytesNew);