我写了这个,是个好人吗?
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字符串读取)
答案 0 :(得分:1)
string array = "1010101";
byte[] sequence = array.Select(c => Convert.ToByte(c.ToString())).ToArray();
或
byte[] bytes = Encoding.ASCII.GetBytes(array);
答案 1 :(得分: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;
}
答案 2 :(得分:0)
Mehrdad对你的问题a good answer。代码:
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;
}
答案 3 :(得分:0)
我可能会误解这个问题,但是:
public byte[] BitStringToAsciiArray(string bits)
{
return Encoding.ASCII.GetBytes(bits);
}
但是,如果输入字符串中的任何字符不是'0'
或'1'
,则不会出现任何错误。
但是否则它确实返回一个字节数组,对于输入字符串中的'0'
为48,对于输入字符串中的'1'
为49。这些是'0'
和'1'
的ASCII代码。
答案 4 :(得分: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
答案 5 :(得分:0)
将所有字符追加为以下长度:
var l = 0L;
foreach (var c in s)
{
l <<= 1;
l += c;
}
var b = BitConverter.GetBytes(l);