新聞中心
go語言集合怎么轉(zhuǎn)換為字節(jié)數(shù)組
直接將字符變量賦值給整型變量,即可實(shí)現(xiàn)字符到對應(yīng)ASCII碼的轉(zhuǎn)換。
專注于為中小企業(yè)提供網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)河池免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了數(shù)千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
如何將任意Golang接口轉(zhuǎn)換為字節(jié)數(shù)組
golang語言本身就是c的工具集,開發(fā)c的程序用到的大部分結(jié)構(gòu)體,內(nèi)存管理,攜程等,golang基本都有,他只是在這個(gè)基礎(chǔ)上又加了一些概念這里說一個(gè)很小的問題,就是字節(jié)數(shù)組轉(zhuǎn)string的問題,網(wǎng)上大部分都是這樣轉(zhuǎn)的(包括google上):string(p[:]),這個(gè)轉(zhuǎn)完了是有問題的,我們再來看一下string這個(gè)結(jié)構(gòu)體:
struct String
{
byte* str;
intgo len;
};
這個(gè)結(jié)構(gòu)體讓我想起了nginx的string,他是這樣定義的:
typedef struct {
size_t len;
u_char *data;
} ngx_str_t;
golang里邊 string的概念其實(shí)不是以前遇到\0結(jié)尾的概念了,他其實(shí)就是一塊連續(xù)的內(nèi)存,首地址+長度,上面那樣賦值,如果p里邊有\(zhòng)0,他不會(huì)做處理這個(gè)時(shí)候,如果再對這個(gè)string做其他處理就可能出問題了,比如strconv.Atoi轉(zhuǎn)成int就有錯(cuò)誤,解決辦法就是需要自己寫一個(gè)正規(guī)的轉(zhuǎn)換函數(shù):
func byteString(p []byte) string {
for i := 0; i len(p); i++ {
if p[i] == 0 {
return string(p[0:i])
}
}
return string(p)
}
這樣就不會(huì)出問題了
golang 中結(jié)構(gòu)體與字節(jié)數(shù)組能相互轉(zhuǎn)化么
結(jié)構(gòu)體與[]byte不能直接轉(zhuǎn)化,可以通過gob來轉(zhuǎn)換。
編碼時(shí)如下,假設(shè)默認(rèn)的結(jié)構(gòu)體為data
func Encode(data interface{}) ([]byte, error) { buf := bytes.NewBuffer(nil) enc := gob.NewEncoder(buf) err := enc.Encode(data) if err != nil { return nil, err } return buf.Bytes(), nil }解碼時(shí)如下,data為需要解碼的字節(jié)數(shù)組,to為相應(yīng)的接收結(jié)構(gòu)體,記住to的結(jié)構(gòu)體結(jié)構(gòu)應(yīng)與被編碼的data相一致,解碼后內(nèi)容保存在to里面,直接使用to即可
func Decode(data []byte, to interface{}) error { buf := bytes.NewBuffer(data) dec := gob.NewDecoder(buf) return dec.Decode(to) }使用的時(shí)候:
b, err := Encode(data) if err != nil { //錯(cuò)誤處理 } if err := Decode(b, to); err != nil { //錯(cuò)誤處理}
文章名稱:go語言怎么轉(zhuǎn)換字節(jié)數(shù) go語言進(jìn)制轉(zhuǎn)換
URL鏈接:http://fisionsoft.com.cn/article/ddssocs.html