假如拿到了一個字節切片test1 = {'a', 'b', 'c', 'd', 11}
package main
import (
"fmt"
"reflect"
)
func main(){
test1 := []byte {'a', 'b', 'c', 'd', 11}
fmt.Println(test1)
test2 := string(test1)
fmt.Println(test2)
fmt.Println(reflect.TypeOf(test1[0]))
return
}
打印的結果
[97 98 99 100 11]
abcd
uint8
這其實就是ASCII碼值與英文ASCII字符的互轉。ASCII的碼值本質上就是uint8類型。 留意一下11對應的是垂直制表符(控制字符), 因此打印出來是看起來是亂碼的 “”這個。
對於ASCII碼表,應該能簡單的記憶一些常用的,有時候比較方便。 參考: http://asciima.com/
這篇博客主要是記錄今天遇到的一個Bug: 在用sring對字節序列進行強轉時,報了一個不是uint8的錯誤。
我的解釋:
字節 --> 字符串 的轉換過程,本質上是字節解碼的過程。 這bug的原因應該是該字節不是純粹的uint8類型,它不是ASCII碼,它有可能是utf-8的編碼或者別的如GBK。
因此應該先確定是哪種編碼,指定編碼的類型,然后再選擇轉換的方式。
