Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays vb.net中的布尔数组到字节_Arrays_Vb.net_Variables_Boolean_Byte - Fatal编程技术网

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