第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

符文和字節(jié)(切片)之間的轉(zhuǎn)換

符文和字節(jié)(切片)之間的轉(zhuǎn)換

Go
蝴蝶不菲 2022-06-21 15:53:23
Go 允許從runeto轉(zhuǎn)換byte。rune但是對(duì)于is的底層類型int32(因?yàn)?Go 使用 UTF-8),對(duì)于byteis uint8,轉(zhuǎn)換因此會(huì)導(dǎo)致信息丟失。但是,無(wú)法從符文轉(zhuǎn)換為[]byte.var b byte = '?'bs := []byte(string('?'))fmt.Println(b)fmt.Println(bs)// Output169[194 169]為什么 Go 允許轉(zhuǎn)換 from runetobyte而不是runeto []byte?
查看完整描述

3 回答

?
精慕HU

TA貢獻(xiàn)1845條經(jīng)驗(yàn) 獲得超8個(gè)贊

Go 支持從runeto的轉(zhuǎn)換,byte就像它對(duì)所有數(shù)字類型對(duì)所做的那樣。如果不允許轉(zhuǎn)換,那將是一個(gè)令人驚訝的特殊int32情況byte。

但底層的類型runeint32(因?yàn)?Go 使用 UTF-8)

這遺漏了一個(gè)重要的細(xì)節(jié):runeint32. 它們是同一類型。

確實(shí),底層類型是runeis int32,但這是因?yàn)?code>runeandint32是相同的類型,而內(nèi)置類型的底層類型是類型本身。

Unicode 代碼點(diǎn)作為int32值的表示與 UTF-8 編碼無(wú)關(guān)。

因此,轉(zhuǎn)換會(huì)導(dǎo)致信息丟失

是的,數(shù)字類型之間的轉(zhuǎn)換可能會(huì)導(dǎo)致信息丟失。這是 Go 中的轉(zhuǎn)換必須是顯式的原因之一。

請(qǐng)注意,該語(yǔ)句var b byte = '?'不進(jìn)行任何轉(zhuǎn)換。該表達(dá)式'@'是一個(gè)無(wú)類型的常量。

如果分配無(wú)類型常量導(dǎo)致信息丟失,編譯器會(huì)報(bào)告錯(cuò)誤。例如,該語(yǔ)句var b byte = '世'會(huì)導(dǎo)致編譯錯(cuò)誤。

該語(yǔ)言中的所有 UTF-8 編碼功能都與string類型有關(guān)。UTF-8 感知轉(zhuǎn)換都是與string類型之間的。可以支持轉(zhuǎn)換,[]byte(numericType)但這會(huì)將 UTF-8 編碼帶到string類型之外。

Go 作者對(duì)包含string(numericType)轉(zhuǎn)換感到遺憾,因?yàn)樗趯?shí)踐中不是很有用,而且轉(zhuǎn)換也不是某些人所期望的。庫(kù)函數(shù)是該功能的更好位置。


查看完整回答
反對(duì) 回復(fù) 2022-06-21
?
撒科打諢

TA貢獻(xiàn)1934條經(jīng)驗(yàn) 獲得超2個(gè)贊

是的,可以從 rune 轉(zhuǎn)換為 []byte(例如通過字節(jié))并再次轉(zhuǎn)換回來。


package main


import "fmt"


func main() {

    var b byte = '?'

    bs := []byte

    fmt.Printf("%T %v\n", b, b)   // uint8 169

    fmt.Printf("%T %v\n", bs, bs) // []uint8 [169]


    s := string(bs[0]) // s := string(b) works too.

    r2 := rune(s[0]) // r2 := rune(b) works too.

    fmt.Printf("%T %v\n", s, s) // string ?

    fmt.Printf("%T %v\n", r2, r2) // int32 169

}


查看完整回答
反對(duì) 回復(fù) 2022-06-21
?
搖曳的薔薇

TA貢獻(xiàn)1793條經(jīng)驗(yàn) 獲得超6個(gè)贊

這種行為的原因與合法的原因相同


var b int32

b = 1000000

fmt.Printf("%b\n", b)

fmt.Printf("%b", uint8(b))


// Output:

// 11110100001001000000

// 1000000

當(dāng)您將具有較大內(nèi)存占用的類型的數(shù)據(jù)放入具有較小內(nèi)存占用的類型時(shí),您應(yīng)該期望轉(zhuǎn)換為松散數(shù)據(jù)。


此外,對(duì)于 a 編碼,rune您可以使用EncodeRune,它確實(shí)使用 a []byte。


查看完整回答
反對(duì) 回復(fù) 2022-06-21
  • 3 回答
  • 0 關(guān)注
  • 148 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)