Golang – convert [8]bool to byte

huangapple go评论86阅读模式
英文:

Golang - convert [8]bool to byte

问题

我正在尝试将长度为8的布尔数组转换为字节。有人知道如何做吗?

mei := [8]bool{true, true, true, true, false, false, false, false}
myvar := ConvertToByte(mei)

英文:

I am trying to convert a bool array of length 8 into a byte. Anyone know how?

mei := [8]bool{true, true, true, true, false, false, false, false}
myvar := ConvertToByte(mei)

答案1

得分: 2

通过位移和设置的方式迭代遍历位。

以下是最高有效位在数组索引0处的情况下的代码:

func ConvertToUint8(mei [8]bool) uint8 {
    var result uint8
    for _, b := range mei {
        result <<= 1
        if b {
            result |= 1
        }
    }
    return result
}

mei := [8]bool{true, true, true, true, false, false, false, false}
myvar := ConvertToUint8(mei)
fmt.Printf("%b\n", myvar) // 输出 11110000

以下是最低有效位在数组索引0处的情况下的代码:

func ConvertToUint8(mei [8]bool) uint8 {
    var result uint8
    for _, b := range mei {
        result >>= 1
        if b {
            result |= 0b10000000
        }
    }
    return result
}

mei := [8]bool{true, true, true, true, false, false, false, false}
myvar := ConvertToUint8(mei)
fmt.Printf("%08b\n", myvar) // 输出 00001111
英文:

Iterate through the bits, shifting and setting as you go.

Here's the code for the case where the most significant bit is at index 0 in the array:

func ConvertToUint8(mei [8]bool) uint8 {
	var result uint8
	for _, b := range mei {
		result &lt;&lt;= 1
		if b {
			result |= 1
		}
	}
	return result
}


mei := [8]bool{true, true, true, true, false, false, false, false}
myvar := ConvertToUint8(mei)
fmt.Printf(&quot;%b\n&quot;, myvar) // prints 11110000

Here's the code for the case where the least significant bit is at index 0 in the array:

func ConvertToUint8(mei [8]bool) uint8 {
	var result uint8
	for _, b := range mei {
		result &gt;&gt;= 1
		if b {
			result |= 0b10000000
		}
	}
	return result
}

mei := [8]bool{true, true, true, true, false, false, false, false}
myvar := ConvertToUint8(mei)
fmt.Printf(&quot;%08b\n&quot;, myvar) // prints 00001111

答案2

得分: 2

func ConvertToByte(bits [8]bool) byte {
	var b byte
	for _, bit := range bits {
		b <<= 1
		if bit {
			b |= 1
		}
	}
	return b
}

这是一个将长度为8的布尔数组转换为字节的函数。函数通过遍历布尔数组中的每个元素,将其转换为字节表示。在每次迭代中,将字节左移一位,并根据当前布尔值设置最低位。最后,返回转换后的字节值。

英文:
func ConvertToByte(bits [8]bool) byte {
	var b byte
	for _, bit := range bits {
		b &lt;&lt;= 1
		if bit {
			b |= 1
		}
	}
	return b
}

答案3

得分: -1

只是一点点的位操作。对数组进行迭代:

func boolsToByte(flags [8]bool) (b byte) {
    mask := byte(0x80)
    for _, f := range flags {
        if f {
            b |= mask
        }
        mask >>= 1
    }
    return b
}
英文:

Just a little bit-twiddling. Iterate over the array:

func boolsToByte( flags [8]bool ) (b byte) {
	mask := byte(0x80)
	for _, f := range flags {
		if f {
			b |= mask
		}
		mask &gt;&gt;= 1
	}
	return b
}

huangapple
  • 本文由 发表于 2022年9月14日 07:46:05
  • 转载请务必保留本文链接:https://go.coder-hub.com/73710132.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定