繁体   English   中英

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

[英]How to convert a string of bits to byte array

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

"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-字节数组/

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<byte> mahByteArray = new List<byte>();
    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();
}

这应该使您得到答案: 如何将位转换为字节?

您可以将字符串转换为与该文章相同的数组,然后使用相同的逻辑执行转换。

将字符分成八组,并解析为一个字节:

string bits = "0000101000010000";

byte[] data =
  Regex.Matches(bits, ".{8}").Cast<Match>()
  .Select(m => Convert.ToByte(m.Groups[0].Value, 2))
  .ToArray();

你可以去下面的任何一个

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM