How to convert a string of bits to byte array

2019-01-15 03:38发布

I have a string representing bits, such as:

"0000101000010000"

I want to convert it to get an array of bytes such as:

{0x0A, 0x10}

The number of bytes is variable but there will always be padding to form 8 bits per byte (so 1010 becomes 000010101).

标签: c# .net parsing
7条回答
时光不老,我们不散
2楼-- · 2019-01-15 03:56

This should get you to your answer: How can I convert bits to bytes?

You could just convert your string into an array like that article has, and from there use the same logic to perform the conversion.

查看更多
手持菜刀,她持情操
3楼-- · 2019-01-15 04:01
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;
}
查看更多
一纸荒年 Trace。
4楼-- · 2019-01-15 04:03

You can go any of below,

        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);
查看更多
做个烂人
5楼-- · 2019-01-15 04:06

Get the characers in groups of eight, and parse to a byte:

string bits = "0000101000010000";

byte[] data =
  Regex.Matches(bits, ".{8}").Cast<Match>()
  .Select(m => Convert.ToByte(m.Groups[0].Value, 2))
  .ToArray();
查看更多
SAY GOODBYE
6楼-- · 2019-01-15 04:09

Here's a quick and straightforward solution (and I think it will meet all your requirements): http://vbktech.wordpress.com/2011/07/08/c-net-converting-a-string-of-bits-to-a-byte-array/

查看更多
虎瘦雄心在
7楼-- · 2019-01-15 04:13

Use the builtin Convert.ToByte() and read in chunks of 8 chars without reinventing the thing..

Unless this is something that should teach you about bitwise operations.

Update:


Stealing from Adam (and overusing LINQ, probably. This might be too concise and a normal loop might be better, depending on your own (and your coworker's!) preferences):

public static byte[] GetBytes(string bitString) {
    return Enumerable.Range(0, bitString.Length/8).
        Select(pos => Convert.ToByte(
            bitString.Substring(pos*8, 8),
            2)
        ).ToArray();
}
查看更多
登录 后发表回答