Golang 字符串與字節(jié)數(shù)組互轉(zhuǎn)的實(shí)現(xiàn)
一、字符串與字節(jié)數(shù)組?
字符串是 Go 語(yǔ)言中最常用的基礎(chǔ)數(shù)據(jù)類型之一,本質(zhì)上是只讀的字符型數(shù)組,雖然字符串往往都被看做是一個(gè)整體,但是實(shí)際上字符串是一片連續(xù)的內(nèi)存空間。
Go 語(yǔ)言中另外一個(gè)類型字節(jié)(Byte)。在ASCII中,一個(gè)英文字母占一個(gè)字節(jié)的空間,一個(gè)中文漢字占兩個(gè)字節(jié)的空間。英文標(biāo)點(diǎn)占一個(gè)字節(jié),中文標(biāo)點(diǎn)占兩個(gè)字節(jié)。一個(gè)Byte數(shù)組中的元素對(duì)應(yīng)一個(gè)ASCII碼。
二、詳細(xì)代碼
1.字節(jié)轉(zhuǎn)字符串
代碼如下(示例):
func BytesToString(data []byte) string { return *(*string)(unsafe.Pointer(&data)) }
2.字符串轉(zhuǎn)字節(jié)數(shù)組
代碼如下(示例):
func StringToBytes(data string) []byte { return *(*[]byte)(unsafe.Pointer(&data)) }
3.完整運(yùn)行測(cè)試
代碼如下(示例):
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) }
結(jié)果(示例):
成功轉(zhuǎn)譯出Hello world!
總結(jié)
兩個(gè)方法來記住字節(jié)數(shù)組與字符串互轉(zhuǎn),簡(jiǎn)單直接,實(shí)用性拉滿。
在byte數(shù)組轉(zhuǎn)字符串時(shí),需要去掉數(shù)組中ASII為0的字符,數(shù)組的大小是固定的,字符串本身的長(zhǎng)度可能小于數(shù)組的長(zhǎng)度,如果直接轉(zhuǎn)換成字符串就會(huì)出現(xiàn)問題。使用byte切片時(shí)候正常的原因是切片的長(zhǎng)度會(huì)自動(dòng)和字符串的長(zhǎng)度一致,string會(huì)區(qū)切片長(zhǎng)度個(gè)數(shù)的字符。而數(shù)組在初始化時(shí)會(huì)有默認(rèn)值,且數(shù)組的長(zhǎng)度和容量一樣,轉(zhuǎn)換成字符串的時(shí)候可能會(huì)多出一部分字符,從而導(dǎo)致出錯(cuò)。
到此這篇關(guān)于Golang 字符串與字節(jié)數(shù)組互轉(zhuǎn)的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Golang 字符串與字節(jié)數(shù)組互轉(zhuǎn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Go語(yǔ)言內(nèi)建函數(shù)cap的實(shí)現(xiàn)示例
cap 是一個(gè)常用的內(nèi)建函數(shù),它用于獲取某些數(shù)據(jù)結(jié)構(gòu)的容量,本文主要介紹了Go語(yǔ)言內(nèi)建函數(shù)cap的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2024-08-08