Я пытаюсь преобразовать логический массив длиной 8 в байт. Кто-нибудь знает, как?
mei := [8]bool{true, true, true, true, false, false, false, false}
myvar := ConvertToByte(mei)
Каково предполагаемое значение myvar в вашем примере?
@HymnsForDisco Изменена стойка ворот, извините за это!
byte — это просто псевдоним для uint8; они одного типа.

Перебирайте биты, меняя и устанавливая по ходу дела.
Вот код для случая, когда самый старший бит находится в индексе 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) // prints 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) // prints 00001111
Для преобразования в uint8 это то же самое, но с заменой byte на uint8?
@BAR byte — это псевдоним для uint8. Используйте любой тип. Я редактирую ответ, чтобы уменьшить путаницу.
func ConvertToByte(bits [8]bool) byte {
var b byte
for _, bit := range bits {
b <<= 1
if bit {
b |= 1
}
}
return b
}
Для преобразования в uint8 это то же самое, но с заменой байта на uint8?
@BAR См. мой другой комментарий, но byte и uint8 — это всего лишь два слова для обозначения одного и того же типа в Go. Вы можете заменить любое или все вхождения byte на uint8 или наоборот, и это будет одна и та же программа. Используйте тот, который вы предпочитаете.
Чуть-чуть повозился. Перебрать массив:
func boolsToByte( flags [8]bool ) (b byte) {
mask := byte(0x80)
for _, f := range flags {
if f {
b |= mask
}
mask >>= 1
}
return b
}
Насколько я знаю, в Go нет простого способа сделать это. Поэтому вам нужно написать свою собственную реализацию. Вот несколько вопросов об одном и том же в Java и C#, которые могут помочь вам начать работу.