哆啦的時(shí)光機(jī)
2022-09-12 20:22:32
我正在從C背景開始自學(xué)。下面的代碼按照我的預(yù)期工作(前兩個(gè)將訪問字節(jié),最后兩個(gè)將訪問代碼點(diǎn))。Printf()Printf()我不清楚的是,這是否涉及任何數(shù)據(jù)復(fù)制。package mainimport "fmt"var a stringfunc main() { a = "èe" fmt.Printf("%d\n", a[0]) fmt.Printf("%d\n", a[1]) fmt.Println("") fmt.Printf("%d\n", []rune(a)[0]) fmt.Printf("%d\n", []rune(a)[1])}換句話說:確實(shí)創(chuàng)建了一個(gè)符文數(shù)組,并用對(duì)應(yīng)于 的符文填充它,或者只是編譯器來弄清楚如何從字符串字節(jié)中獲取符文?[]rune("string")"string"
2 回答

慕的地10843
TA貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超8個(gè)贊
如果不分配數(shù)組,就不可能將 []uint8(即字符串)轉(zhuǎn)換為 []int32([]符文的別名)。
此外,字符串在 Go 中是不可變的,但切片是不可變的,因此轉(zhuǎn)換為 []字節(jié)和 []rune 必須以某種方式復(fù)制字符串的字節(jié)。

波斯汪
TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超4個(gè)贊
它涉及副本,因?yàn)椋?/p>
字符串是不可變的;如果轉(zhuǎn)換沒有復(fù)制,您將能夠?yàn)榉那衅幹扑饕⒏淖址畠?nèi)容
[]rune(s)
字符串
值是“(可能是空的)字節(jié)序列”,其中 是 的別名,而符文
是“標(biāo)識(shí) Unicode 代碼點(diǎn)的整數(shù)值”和 別名 。類型不相同,甚至長度也可能不相同:byte
uint8
int32
a = "èe"
r := []rune(a)
fmt.Println(len(a)) // 3 (3 bytes)
fmt.Println(len(r)) // 2 (2 Unicode code points)
- 2 回答
- 0 關(guān)注
- 84 瀏覽
添加回答
舉報(bào)
0/150
提交
取消