Arrays vb.net中的布尔数组到字节
我正在尝试将布尔数组转换为字节 例如:Arrays vb.net中的布尔数组到字节,arrays,vb.net,variables,boolean,byte,Arrays,Vb.net,Variables,Boolean,Byte,我正在尝试将布尔数组转换为字节 例如: Dim boolarray1() As Boolean = {True, True, True, False, False, False, False, False} 我一直在尝试将这个值转换为另一个名为vOUT的变量byte。在这种情况下,vOUT应该给我一个值7 任何帮助都将不胜感激。根据您的示例,如果数组的最后一个元素是MSB或最高有效位,则可以使用以下方法: Dim boolarray1() As Boolean = {True, T
Dim boolarray1() As Boolean = {True, True, True, False, False, False, False, False}
我一直在尝试将这个值转换为另一个名为vOUT
的变量byte。在这种情况下,vOUT
应该给我一个值7
任何帮助都将不胜感激。根据您的示例,如果数组的最后一个元素是MSB或最高有效位,则可以使用以下方法:
Dim boolarray1() As Boolean = {True, True, True, False, False, False, False, False}
Dim temp As String = ""
For i As Integer = 0 To boolarray1.Length - 1
If boolarray1(i) Then
temp &= "1"
Else
temp &= "0"
End If
Next
temp = StrReverse(temp)
Dim result As Byte = Convert.ToByte(temp, 2)
对于给定的boolarray1,结果将保持“7”。如果在第一个索引中需要MSB,则只需删除以下行:
temp=StrReverse(temp)
,根据您的示例,如果数组的最后一个元素是MSB或最高有效位,则可以使用:
Dim boolarray1() As Boolean = {True, True, True, False, False, False, False, False}
Dim temp As String = ""
For i As Integer = 0 To boolarray1.Length - 1
If boolarray1(i) Then
temp &= "1"
Else
temp &= "0"
End If
Next
temp = StrReverse(temp)
Dim result As Byte = Convert.ToByte(temp, 2)
对于给定的boolarray1,结果将保持“7”。如果在第一个索引中需要MSB,则只需删除以下行:
temp=StrReverse(temp)
使用带左移位和或运算符的位
Dim boolarray1() As Boolean = {True, True, True, False, False, False, False, False}
Dim vout As Byte = 0
Dim bytPos As Integer = 0 ' to change order make this 7
For Each b As Boolean In boolarray1
If b Then
vout = vout Or CByte(1 << bytPos)
End If
bytPos += 1 ' to change order make this -=
Next
Dim boolarray1()作为布尔值={True,True,True,False,False,False}
Dim vout作为字节=0
Dim bytPos As Integer=0'更改订单,使其为7
对于boolarray1中作为布尔值的每个b
如果b那么
vout=vout或CByte(1使用带左移位和或运算符的位
Dim boolarray1() As Boolean = {True, True, True, False, False, False, False, False}
Dim vout As Byte = 0
Dim bytPos As Integer = 0 ' to change order make this 7
For Each b As Boolean In boolarray1
If b Then
vout = vout Or CByte(1 << bytPos)
End If
bytPos += 1 ' to change order make this -=
Next
Dim boolarray1()作为布尔值={True,True,True,False,False,False}
Dim vout作为字节=0
Dim bytPos As Integer=0'更改订单,使其为7
对于boolarray1中作为布尔值的每个b
如果b那么
vout=vout或CByte(1这是我将如何做的:
Public Function convertToByte(bits() As BitArray) As Byte
Dim bytes(0) As Byte
bits.CopyTo(bytes, 0)
Return (bytes(0))
End Function
公共函数convertToByte(bits()作为位数组)作为字节
Dim字节(0)作为字节
位.CopyTo(字节,0)
返回(字节(0))
端函数
我会这样做:
Public Function convertToByte(bits() As BitArray) As Byte
Dim bytes(0) As Byte
bits.CopyTo(bytes, 0)
Return (bytes(0))
End Function
公共函数convertToByte(bits()作为位数组)作为字节
Dim字节(0)作为字节
位.CopyTo(字节,0)
返回(字节(0))
端函数
很高兴听到你这么说。如果你有任何其他问题,请告诉我们。如果没有,请单击“已接受”的答案。谢谢!@Nathu-使用字符串是很长的一段路,你可以只使用位。如果你坚持使用字符串,那么在for中反向遍历数组并跳过StrReverse。字符串使用起来很昂贵。我真的同意你的看法你的帖子@dbasnett。我投了赞成票。如果阵列很小或者没有严重的性能限制,我的解决方案实际上不是问题。干杯!@Nathu-如果代码不经常执行,我同意。听到这个消息太好了。如果你有任何其他问题,请告诉我们。如果没有,请单击“已接受”的答案。谢谢!@Nathu-当你只能使用位时,使用字符串是一个漫长的过程。如果你坚持使用字符串,那么在for中反向遍历数组并跳过StrReverse。字符串的使用成本很高。我实际上同意你的帖子@dbasnett。我对它投了赞成票。如果数组很小或者不会有太大的执行,我的解决方案实际上不是一个问题NCE限制。干杯!@Nathu-如果代码不经常执行,则表示同意。请使用左移位and或运算符。请参阅下面的答案。使用左移位and或运算符。请参阅下面的答案。使用Static
关键字将导致代码在重复使用时无法正常工作(尝试移位时可能会引发异常)因为变量将继续保持其值。您可以简单地在循环之前声明它,使用Dim
,如果重复使用Static
关键字,将导致代码无法正常工作(在尝试移位时可能会引发异常)因为变量将继续保持其值。您可以在循环之前使用Dim