对于一个前端背景的人来说,理解byte类型真是一件费力的事。因为js里并没有byte,作为静态类语言go,肯定要与底层打交道,就不得不学习byte类型。
byte就是字节的意思,一个字节就是8个二进制位。2的8次方-1=127。uint8,无符号整形,占8位,正好也是2的8次方-1,127.
1,定义byte(字符)类型
var aa byte = 'a' // 单个字符 byte(uint8类型的别名)。 可以和整型类型直接相加减
fmt.Printf("%c
", aa) // a 占位符%c表示字符
fmt.Printf("%T
", aa) // uint8 (byte类型其实就是uint8类型的别名)
再看看ASCII的定义:
ASCII ((American Standard Code for Information Interchange): 美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是最通用的信息交换标准,并等同于国际标准ISO/IEC 646。ASCII第一次以规范标准的类型发表是在1967年,最后一次更新则是在1986年,到目前为止共定义了128个字符
正好也是128个字符,对应一个字节,对应uint8
这就好理解,单个字符为什么是byte了。因为0-9,a-z,A-Z都对应一个ASCII值,字符就在其中。
如果用十六进制表示,正好占两位。0x_ _两位来表示。
美国人民真幸福,这128个字符就能满足需求了。
别的国家,开始在此基础上扩充。
详细参考:http://c.biancheng.net/view/18.html
2,字节数组
就是一个数组,里面每一个元素都是字符,字符又跟字节划等号。所以字符串和字节数组之间可以相互转化。
1. string 转为[]byte
var str string = "test"
var data []byte = []byte(str)
2. byte转为string
var data [10]byte
byte[0] = 'T'
byte[1] = 'E'
var str string = string(data[:])