C# 如何将bool[]转换为字节[]
我有布尔数组:C# 如何将bool[]转换为字节[],c#,C#,我有布尔数组: bool[] b6=new bool[] {true, true, true, true, true, false, true, true, true, false, true, false, true, true, false, false }; 如何将其转换为字节数组,以便 字节[0]=0xFB 字节[1]=AC 等 我相信你想要这样的东西: static byte[] ToByteArray(bool[] input) {
bool[] b6=new bool[] {true, true, true, true, true, false, true, true,
true, false, true, false, true, true, false, false };
如何将其转换为字节数组,以便
- 字节[0]=0xFB
- 字节[1]=AC
- 等
- 我相信你想要这样的东西:
static byte[] ToByteArray(bool[] input)
{
if (input.Length % 8 != 0)
{
throw new ArgumentException("input");
}
byte[] ret = new byte[input.Length / 8];
for (int i = 0; i < input.Length; i += 8)
{
int value = 0;
for (int j = 0; j < 8; j++)
{
if (input[i + j])
{
value += 1 << (7 - j);
}
}
ret[i / 8] = (byte) value;
}
return ret;
}
或者类似地(但效率稍低)使用LINQ:
byte[] converted = b6.Select(value => value ? (byte) 1 : (byte) 0).ToArray();
在此之前回答:您可以使用Linq执行此操作:
var byteArray =
b6
.Select(b => (byte)(b ? 1 : 0))
.ToArray();
如果要将每组八个布尔值转换为一个字节,可以使用
位数组
类:
byte[] data = new byte[2];
new BitArray(b6).CopyTo(data, 0);
数组data
现在包含两个值0xDF和0x35
编辑:
如果希望得到结果0xFB和0xAC,则必须首先反转数组中的布尔值:
Array.Reverse(b6, 0, 8);
Array.Reverse(b6, 8, 8);
什么规则控制转换的副本?您希望得到多少字节的结果?应将
true
转换为什么?和false
?尝试右上角的搜索,如果没有找到任何解决方案,则发布问题。有符号或无符号字节?不知道数组。ConvertAll
。我想我必须先做一个ToList()
,然后才能使用ConvertAll
,所以+1:)我想得到第1位到第8位的结果。但这段代码计算结果第8位到第1位。@HimanshuBajpai:如果你一开始就给出了明确的要求,我会满足它们。。。但是修改上面的代码应该很容易。(提示:更改行value+=1@HimanshuBajpai:我现在编辑了代码,主要是为了将来讨论这个问题的人。但是,下次你提问时,请从一开始就提供更多详细信息。请阅读有关提问的建议。
var byteArray =
b6
.Select(b => (byte)(b ? 1 : 0))
.ToArray();
byte[] data = new byte[2];
new BitArray(b6).CopyTo(data, 0);
Array.Reverse(b6, 0, 8);
Array.Reverse(b6, 8, 8);