日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Golang?字符串與字節數組互轉的實現_Golang

作者:頭禿貓輕王 ? 更新時間: 2022-04-25 編程語言

一、字符串與字節數組?

字符串是 Go 語言中最常用的基礎數據類型之一,本質上是只讀的字符型數組,雖然字符串往往都被看做是一個整體,但是實際上字符串是一片連續的內存空間。

Go 語言中另外一個類型字節(Byte)。在ASCII中,一個英文字母占一個字節的空間,一個中文漢字占兩個字節的空間。英文標點占一個字節,中文標點占兩個字節。一個Byte數組中的元素對應一個ASCII碼。

二、詳細代碼

1.字節轉字符串

代碼如下(示例):

func BytesToString(data []byte) string {
    return *(*string)(unsafe.Pointer(&data))
}

2.字符串轉字節數組

代碼如下(示例):

func StringToBytes(data string) []byte {
    return *(*[]byte)(unsafe.Pointer(&data))
}

3.完整運行測試

代碼如下(示例):

func BytesToString(data []byte) string {
?? ?return *(*string)(unsafe.Pointer(&data))
}


func StringToBytes(data string) []byte {
?? ?return *(*[]byte)(unsafe.Pointer(&data))
}

func main() {
?? ?str := "hello world!"

?? ?fmt.Println(str)

?? ?a := StringToBytes(str)

?? ?fmt.Println(a)

?? ?b := BytesToString(a)

?? ?fmt.Println(b)
}

結果(示例):

成功轉譯出Hello world!

總結

兩個方法來記住字節數組與字符串互轉,簡單直接,實用性拉滿。

在byte數組轉字符串時,需要去掉數組中ASII為0的字符,數組的大小是固定的,字符串本身的長度可能小于數組的長度,如果直接轉換成字符串就會出現問題。使用byte切片時候正常的原因是切片的長度會自動和字符串的長度一致,string會區切片長度個數的字符。而數組在初始化時會有默認值,且數組的長度和容量一樣,轉換成字符串的時候可能會多出一部分字符,從而導致出錯。

原文鏈接:https://blog.csdn.net/moer0/article/details/122934188

欄目分類
最近更新