登录
首页 >  Golang >  Go问答

将布尔数组转换为字节数组

来源:stackoverflow

时间:2024-03-03 11:54:25 278浏览 收藏

积累知识,胜过积蓄金银!毕竟在Golang开发的过程中,会遇到各种各样的问题,往往都是一些细节知识点还没有掌握好而导致的,因此基础知识点的积累是很重要的。下面本文《将布尔数组转换为字节数组》,就带大家讲解一下知识点,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~

问题内容

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

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_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<

演示: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]

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《将布尔数组转换为字节数组》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>