0

我写了这个,好用吗?

byte[] ConvertToBytes(string b)
    {
        BitArray bits = new BitArray(b.ToList().ConvertAll<bool>(x => x == '1').ToArray());

        byte[] ret = new byte[bits.Length];
        bits.CopyTo(ret, 0);

        return ret;
    }

(数组必须作为 ascii 字符串可读)

4

6 回答 6

2
string array = "1010101";
byte[] sequence = array.Select(c => Convert.ToByte(c.ToString())).ToArray();

或者

byte[] bytes = Encoding.ASCII.GetBytes(array);
于 2013-10-31T14:10:03.767 回答
1

我可以提出一种有效的方法,认为实施起来一定不难。

我假设字符串格式正确,它是字符串格式的二进制表示。

private static byte[] BinStringToBytes(string binary)
{
    //make sure the string length is multiple of 32, if not pad it with zeroes
    var neededZeros = 32 - (binary.Length % 32);

    if (neededZeros > 0)
        binary = string.Concat(new string('0', neededZeros), binary);

    var blocks = binary.Length / 32;

    var binbytes = new byte[blocks * 4];

    for (var i = 0; i < blocks; i++)
    {
        var numstr = binary.Substring(i * 32, 32);
        var num = Convert.ToUInt32(numstr, 2);
        var bytes = BitConverter.GetBytes(num);
        Array.Copy(bytes, 0, binbytes, i * 4, 4);
    }

    return binbytes;
}
于 2013-10-31T15:35:55.283 回答
0

Mehrdad对你的问题有很好的回答。编码:

static byte[] GetBytes(string str)
{
    byte[] bytes = new byte[str.Length * sizeof(char)];
    System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);
    return bytes;
}
于 2013-10-31T14:16:14.597 回答
0

我可能误解了这个问题,但是:

public byte[] BitStringToAsciiArray(string bits)
{
    return Encoding.ASCII.GetBytes(bits);
}

但是,如果输入字符串中的任何字符不是'0'or ,它不会给出任何错误'1'

但除此之外,它确实返回一个字节数组,每个字节数组对于输入字符串中的 a 是 48,对于'0'输入字符串中的 a 是 49 '1'。这些分别是 和 的 ASCII'0''1'

于 2013-10-31T14:31:16.740 回答
0

选择:

您最好不要使用byte[]但实际上只是将二进制数存储为整数:

Convert.ToInt32("1011", 2) // returns 11

反过来说:

Convert.ToString(11, 2) // returns "1011"

如果你需要了解nth一下(从右边开始):

public int GetNthBit(int binary, int n)
{
    return (binary >> n) % 2;
}

用法:

GetNthBit(11, 2) // returns 0
于 2013-10-31T14:39:59.237 回答
0

将所有字符追加到 long 中,如下所示:

var l = 0L;
foreach (var c in s)
{
    l <<= 1;
    l += c;
}
var b = BitConverter.GetBytes(l);
于 2020-03-13T18:10:41.160 回答