golang中int与字节是如何转换的

  介绍

这篇文章主要为大家详细介绍了golang中int与字节是如何转换的,文中示例代码介绍的非常详细,具有一定的参考价值,发现的小伙伴们可以参考一下:

golang的优点有哪些

golang是一种编译语言,可以将代码编译为机器代码,编译后的二进制文件可以直接部署到目标机器而无需额外的依赖,所以golang的性能优于其他的解释性语言,且可以在golang中使用goroutine来实现并发性,它提供了一个非常优雅的goroutine调度程序系统,可以很容易地生成数百万个goroutine。

<强>主机字节序

主机字节序模式有两种,大端数据模式和小端数据模式,在网络编程中应注意这两者的区别,以保证数据处理的正确性,例如网络的数据是以大端数据模式进行交互,而我们的主机大多数以小端模式处理,如果不转换,数据会混乱参考,一般来说,两个主机在网络通信需要经过如下转换过程:主机字节序→网络字节序→主机字节序

<强>大端小端区别

大端模式:高位优先就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端
低地址- - - - - - - - - - - - - - - - - - - - - -在高地址
高位字节,,,,,,,,,,,,,,,,,,,,地位字节
小端模式:低位优先就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端
低地址- - - - - - - - - - - - - - - - - - - - - -在高地址
低位字节,,,,,,,,,,,,,,,,,,,,高位字节

<强>什么是高位字节和低位字节

例如在32位系统中,357年转换成二级制为:00000000 00000000 00000000 01100101,其中

00000001 | 00000001
高位字节,,,,低位字节

<强> int和字节转换

在去语言中,字节其实是uint8的别名,字节和uint8之间可以直接进行互转。目前来只能将0 ~ 255范围的int转成字节。因为超出这个范围,走在转换的时候,就会把多出来数据扔掉;如果需要将int32转类成字节型,我们只需要一个长度为4的[]字节数组就可以了

<强>大端模式下

func f2 () {
,,,var v2 uint32
,,,var b2[4]字节
,,,v2=257
,,,//将257转成二进制就是
,,,//| 00000000 | 00000000 | 00000001 | 00000001 |
,,,//| b2 [0],,,| b2 [1],,,| b2 [2],,,| b2 [3],,,|//这里表示b2数组每个下标里面存放的值
,,,//这里直接使用将uint32强转成uint8
,,,//| 00000000 0000000 00000000 | 00000000,直接转成uint8后等于1
,,,//| - - - - - -这部分走在强转的时候扔掉- - - - - - |
,,,b2 [3]=uint8 (v2)
,,,//| 00000000 | 00000000 | 00000001 | 00000001 |右移8位转成uint8后等于1
,,,//下面是右移后的数据
,,,//|,,,,,,,,,| 00000000 | 00000000 | 00000000 |
,,,b2 [2]=uint8 (v2祝辞祝辞8)
,,,//| 00000000 | 00000000 | 00000001 | 00000001 |右移16位转成uint8后等于0
,,,//下面是右移后的数据
,,,//|,,,,,,,,,|,,,,,,,,,| 00000000 | 00000000 |
,,,b2 [1]=uint8 (v2祝辞祝辞16)
,,,//| 00000000 | 00000000 | 00000001 | 00000001 |右移24位转成uint8后等于0
,,,//下面是右移后的数据
,,,//|,,,,,,,,,|,,,,,,,,,|,,,,,,,,,| 00000000 |
,,,b2 [0]=uint8 (v2祝辞祝辞24)
,,,fmt.Printf (“% + v \ n" b2)
,,,//所以最终将uint32转成[]字节数组输出为
,,,//[0 0 1 1]
}

<强>小端模式下

//,在上面我们讲过,小端刚好和大端相反的,所以在转成小端模式的时候,只要将[]字节数组的下标首尾对换一下位置就可以了   func  f3 (), {   var 才能;v3  uint32   var 才能;b3 [4]字节   v3 才能=257//,才能将,256年转成二进制就是//才能,|,00000000,|,00000000,|,00000001,|,00000001 |//才能,|,b3 [0],, |, b3 [1],, |, b3[2],, |,[3],,, |,//,这里表示b3数组每个下标里面存放的值//才能,这里直接使用将uint32l强转成uint8//才能,|,00000000,0000000,00000001,|,00000001,直接转成uint8后等于,1//才能,| - - - - - -这部分走在强转的时候扔掉- - - |   b3才能[0],=,uint8 (v3)//才能,|,00000000,|,00000000,|,00000001,|,00000001,|,右移8位,转成uint8后等于,1//,才能下面是右移后的数据//才能,|,,,,,|,00000000,|,00000000,|,00000001 |   b3才能[1],=,uint8 (v3 在祝辞,8)//才能,|,00000000,|,00000000,|,00000001,|,00000001,|,右移16位,转成uint8后等于,0//,才能下面是右移后的数据//才能,|,,,,,|,,,,,|,00000000,|,00000000 |   b3才能[2],=,uint8 (v3 在祝辞,16)//才能,|,00000000,|,00000000,|,00000001,|,00000001,|,右移24位,转成uint8后等于,0//,才能下面是右移后的数据//才能,|,,,,,|,,,,,|,,,,,|,00000000 |   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

golang中int与字节是如何转换的