英文:
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 <<= 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) // 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 >>= 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) // 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 <<= 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 >>= 1
}
return b
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论