利用golang怎么將整型轉換成字節(jié)數組-創(chuàng)新互聯

本篇文章為大家展示了利用golang怎么將整型轉換成字節(jié)數組,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

創(chuàng)新互聯網站建設提供從項目策劃、軟件開發(fā),軟件安全維護、網站優(yōu)化(SEO)、網站分析、效果評估等整套的建站服務,主營業(yè)務為成都網站設計、網站建設,app開發(fā)定制以傳統(tǒng)方式定制建設網站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。創(chuàng)新互聯深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!

我就廢話不多說了,大家還是直接看代碼吧~

//isSymbol表示有無符號
func BytesToInt(b []byte, isSymbol bool) (int, error){
 if isSymbol {
 return bytesToIntS(b)
 }
 return bytesToIntU(b)
}

//字節(jié)數(大端)組轉成int(無符號的)
func bytesToIntU(b []byte) (int, error) {
 if len(b) == 3 {
 b = append([]byte{0},b...)
 }
 bytesBuffer := bytes.NewBuffer(b)
 switch len(b) {
 case 1:
 var tmp uint8
 err := binary.Read(bytesBuffer, binary.BigEndian, &tmp)
 return int(tmp), err
 case 2:
 var tmp uint16
 err := binary.Read(bytesBuffer, binary.BigEndian, &tmp)
 return int(tmp), err
 case 4:
 var tmp uint32
 err := binary.Read(bytesBuffer, binary.BigEndian, &tmp)
 return int(tmp), err
 default:
 return 0,fmt.Errorf("%s", "BytesToInt bytes lenth is invaild!")
 }
}

//字節(jié)數(大端)組轉成int(有符號)
func bytesToIntS(b []byte) (int, error) {
 if len(b) == 3 {
 b = append([]byte{0},b...)
 }
 bytesBuffer := bytes.NewBuffer(b)
 switch len(b) {
 case 1:
 var tmp int8
 err := binary.Read(bytesBuffer, binary.BigEndian, &tmp)
 return int(tmp), err
 case 2:
 var tmp int16
 err := binary.Read(bytesBuffer, binary.BigEndian, &tmp)
 return int(tmp), err
 case 4:
 var tmp int32
 err := binary.Read(bytesBuffer, binary.BigEndian, &tmp)
 return int(tmp), err
 default:
 return 0,fmt.Errorf("%s", "BytesToInt bytes lenth is invaild!")
 }
}

//整形轉換成字節(jié)
func IntToBytes(n int,b byte) ([]byte,error) {
 switch b {
 case 1:
 tmp := int8(n)
 bytesBuffer := bytes.NewBuffer([]byte{})
 binary.Write(bytesBuffer, binary.BigEndian, &tmp)
 return bytesBuffer.Bytes(),nil
 case 2:
 tmp := int16(n)
 bytesBuffer := bytes.NewBuffer([]byte{})
 binary.Write(bytesBuffer, binary.BigEndian, &tmp)
 return bytesBuffer.Bytes(),nil
 case 3,4:
 tmp := int32(n)
 bytesBuffer := bytes.NewBuffer([]byte{})
 binary.Write(bytesBuffer, binary.BigEndian, &tmp)
 return bytesBuffer.Bytes(),nil
 }
 return nil,fmt.Errorf("IntToBytes b param is invaild")
}

補充:golang整型,float與byte轉換

使用場景:

在tcp協(xié)議傳輸中,為了防止粘包,需要先發(fā)送消息頭,即先發(fā)送數據長度,在根據長度write真正的數據,然e,由于網絡傳輸都是字節(jié)流,怎么將整型轉為字節(jié)流呢?

只需四步:

轉換----int轉int64

申請----申請一個字節(jié)緩沖

寫入----按照二進制,向緩沖寫入數據

取出----以字節(jié)流從緩沖中取出

func IntToBytes(n int)[]byte{
 data:=int64(n)//數據類型轉換
 bytebuffer:=bytes.NewBuffer([]byte{})//字節(jié)集合
 binary.Write(bytebuffer,binary.BigEndian,data)//按照二進制寫入字節(jié)
 return bytebuffer.Bytes()//返回字節(jié)結合
}

解碼同樣需兩步:

1.創(chuàng)建一個以字節(jié)流為內容的buffer()

2.從buf緩沖讀取binary編碼的數據并賦給data

func BytesToInt(bs []byte)int{
 bytebuffer:=bytes.NewBuffer(bs) //根據二進制寫入二進制結合
 var data int64
 binary.Read(bytebuffer,binary.BigEndian,&data) //解碼
 return int(data)
}

上述內容就是利用golang怎么將整型轉換成字節(jié)數組,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注創(chuàng)新互聯行業(yè)資訊頻道。

網站題目:利用golang怎么將整型轉換成字節(jié)數組-創(chuàng)新互聯
文章地址:http://muchs.cn/article34/dpsgse.html

成都網站建設公司_創(chuàng)新互聯,為您提供域名注冊、手機網站建設、用戶體驗外貿建站、企業(yè)建站、網站營銷

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯

成都app開發(fā)公司