golang []byte 类型 和其他类型关系,字节组包解包试用

本文介绍了不同数据类型如int、float、字符串在计算机中的存储字节数,并展示了如何通过binary.Write和binary.Read进行字节操作。重点讲解了整型(int64)和字符串(string)的字节表示,以及字节缓冲的组装与解包过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.各个类型占用字节数

1.bit(位): 二进制数中的一个数位,可以是0或者1,是计算机中数据的最小单位。二进制的一个“0”或一个“1”叫一位
2.Byte(字节): 计算机中数据的基本单位,每8位组成一个字节
int8: 8位,就是一个字节 [-128,127] 非符号 [0,255]
int16: 2个字节 [-32768,32767] 非符号 [0,65535]
int32: 4个字节 [-2147483648,2147483647] 非符号 [0,4294967295]
int64:8个字节 [-9223372036854775808,9223372036854775807]
float32: 4个字节
float64: 8 个字节
int 比较特殊,占用多大取决于你的cpu
32位cpu 就是 4个字节
64位 就是 8 个字节
float32: 4个字节
float64:8个字节

string
英文的ascii的string 1个英文字符或英文标点占1byte
中文的string 一个文字占用 3 byte

bool: 占用1byte

2. 组装其他类型压入字节缓冲

	// 声明一个 buffer
	dataBuff := new(bytes.Buffer)
	//dataBuff := bytes.NewBuffer(make([]byte, 0,22))
	var lens int64 // 占用8个字节
	lens = 4
	// 将 int64 写入 buffer
	if err := binary.Write(dataBuff,binary.LittleEndian,lens);err != nil {
		t.Log(err)
		return
	}
	
	lens = 5
	//将 int64 写入 buffer
	if err := binary.Write(dataBuff,binary.LittleEndian,lens);err != nil {
		t.Log(err)
		return
	}

	// data写入数据中 buffer 两个中文字占用6个字节
	if err := binary.Write(dataBuff,binary.LittleEndian,[]byte("你好"));err != nil {
		t.Log(err)
		return
	}

	b :=  dataBuff.Bytes()
	t.Log("长度:",len(b))  (8+8+6) = int64 + int64 + string
	输出结果:
	长度: 22 

3.byte 解包

	// 解包
	dataReader := bytes.NewReader(b)

	var f int64

	// 低尾 取出 第一个8个字节的int64
	if err := binary.Read(dataReader,binary.LittleEndian,&f);err != nil {
		t.Log(err)
		return
	}
	t.Log("打印1",f)
	// 低尾 取出 第二个8个字节的int64
	if err := binary.Read(dataReader,binary.LittleEndian,&f);err != nil {
		t.Log(err)
		return
	}
	t.Log("打印2",f)

	// 取出string 对应的字节
	ts := b[16:]

	ts2 := []rune(string(ts)) // int32 len(ts2) == 2 []byte []rune
	t.Log("打印3",ts,ts2)

	// 转二进制 1个字节对应8bit
	s := biu.BytesToBinaryString(ts)
	
	t.Log(s)
	输出结果
	datapack_test.go:159: 打印1 4
    datapack_test.go:165: 打印2 5
    datapack_test.go:172: 打印3 [4 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0] [229 190 144 232 181 158] [24464 36190]
    datapack_test.go:176: [11100101 10111110 10010000 11101000 10110101 10011110]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gitxuzan_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值