對於一個前端背景的人來說,理解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 \n", aa) // a 占位符%c表示字符
fmt.Printf("%T \n", 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[:])