为了账号安全,请及时绑定邮箱和手机立即绑定

布尔数组到字节数组

布尔数组到字节数组

Go
拉风的咖菲猫 2023-05-22 16:57:56
我有将字节数组转换为表示 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 数组转换为字节数组?编辑:这个游乐场提供了我的字节数组的更多细节:https://play.golang.org/p/tEDcZv-t_0Qba := []byte{123, 255}
查看完整描述

1 回答

?
慕容3067478

TA贡献1773条经验 获得超3个赞

例如,boolsToBytes的倒数(恰好相反)bytesToBools,


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)

}

游乐场: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))

}

游乐场:https://play.golang.org/p/L9VsTtbkQZW


输出:


[true true true true]

[true true true true]

[true true true true]


查看完整回答
反对 回复 2023-05-22
  • 1 回答
  • 0 关注
  • 114 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信