gpt4 book ai didi

go - bool 数组到字节数组

转载 作者:数据小太阳 更新时间:2023-10-29 03:09:35 26 4
gpt4 key购买 nike

我有将字节数组转换为表示 0 和 1 的 bool 数组的函数:

func byteArrayToBoolArray(ba []byte) []bool {
var s []bool

for _, b := range ba {
for _, c := range strconv.FormatUint(uint64(by), 2) {
s = append(s, c == []rune("1")[0])
}
}

return s
}

一个函数怎么看起来恰恰相反,意味着将 bool 数组转换为字节数组?

编辑:这个 playground 提供了更多关于我的字节数组的细节:https://play.golang.org/p/tEDcZv-t_0Q

ba := []byte{123, 255}

最佳答案

例如,boolsToBytesbytesToBools 的逆(完全相反),

package main

import (
"fmt"
)

func boolsToBytes(t []bool) []byte {
b := make([]byte, (len(t)+7)/8)
for i, x := range t {
if x {
b[i/8] |= 0x80 >> uint(i%8)
}
}
return b
}

func bytesToBools(b []byte) []bool {
t := make([]bool, 8*len(b))
for i, x := range b {
for j := 0; j < 8; j++ {
if (x<<uint(j))&0x80 == 0x80 {
t[8*i+j] = true
}
}
}
return t
}

func main() {
b := []byte{123, 255}
fmt.Println(b)
t := bytesToBools(b)
fmt.Printf("%t\n", t)
b = boolsToBytes(t)
fmt.Println(b)
}

Playground :https://play.golang.org/p/IguJ_4cZKtA

输出:

[123 255]
[false true true true true false true true true true true true true true true true]
[123 255]

该问题提供了一个函数并要求一个反函数(完全相反)。

问题函数算法存在缺陷,多个输入映射到相同的函数值。因此,不存在唯一的逆。

package main

import (
"fmt"
"strconv"
)

func byteArrayToBoolArray(ba []byte) []bool {
var s []bool
for _, b := range ba {
for _, c := range strconv.FormatUint(uint64(b), 2) {
s = append(s, c == []rune("1")[0])
}
}
return s
}

func main() {
ba1 := []byte{0xF}
fmt.Println(byteArrayToBoolArray(ba1))
ba2 := []byte{0x3, 0x3}
fmt.Println(byteArrayToBoolArray(ba2))
ba3 := []byte{0x1, 0x1, 0x1, 0x1}
fmt.Println(byteArrayToBoolArray(ba3))
}

Playground :https://play.golang.org/p/L9VsTtbkQZW

输出:

[true true true true]
[true true true true]
[true true true true]

关于go - bool 数组到字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53924984/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com