欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

golang實現(xiàn)整型和字節(jié)數(shù)組之間的轉(zhuǎn)換操作

 更新時間:2020年12月18日 08:39:52   作者:思維的深度  
這篇文章主要介紹了golang實現(xiàn)整型和字節(jié)數(shù)組之間的轉(zhuǎn)換操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

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

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

//字節(jié)數(shù)(大端)組轉(zhuǎn)成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é)數(shù)(大端)組轉(zhuǎn)成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!")
 }
}

//整形轉(zhuǎn)換成字節(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轉(zhuǎn)換

使用場景:

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

只需四步:

轉(zhuǎn)換----int轉(zhuǎn)int64

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

寫入----按照二進制,向緩沖寫入數(shù)據(jù)

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

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

解碼同樣需兩步:

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

2.從buf緩沖讀取binary編碼的數(shù)據(jù)并賦給data

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

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • go語言LeetCode題解1030距離順序排列矩陣單元格

    go語言LeetCode題解1030距離順序排列矩陣單元格

    這篇文章主要為大家介紹了go語言LeetCode題解1030距離順序排列矩陣單元格,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • Go語言Goroutinue和管道效率詳解

    Go語言Goroutinue和管道效率詳解

    這篇文章主要為大家介紹了Go語言Goroutinue和管道效率使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • GO語言實現(xiàn)簡單TCP服務(wù)的方法

    GO語言實現(xiàn)簡單TCP服務(wù)的方法

    這篇文章主要介紹了GO語言實現(xiàn)簡單TCP服務(wù)的方法,實例分析了Go語言實現(xiàn)TCP服務(wù)的技巧,需要的朋友可以參考下
    2015-03-03
  • Go 語言入門學(xué)習(xí)之正則表達(dá)式

    Go 語言入門學(xué)習(xí)之正則表達(dá)式

    這篇文章主要介紹了Go 語言入門學(xué)習(xí)之正則表達(dá)式,文章基于GO語言的相關(guān)資料展開詳細(xì)內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-04-04
  • Go語言執(zhí)行系統(tǒng)命令行命令的方法

    Go語言執(zhí)行系統(tǒng)命令行命令的方法

    這篇文章主要介紹了Go語言執(zhí)行系統(tǒng)命令行命令的方法,實例分析了Go語言操作系統(tǒng)命令行的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • 淺談golang 的高效編碼細(xì)節(jié)

    淺談golang 的高效編碼細(xì)節(jié)

    本文主要介紹了golang 的高效編碼細(xì)節(jié),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • goland 搭建 gin 框架的步驟詳解

    goland 搭建 gin 框架的步驟詳解

    這篇文章主要介紹了goland 搭建 gin 框架的相關(guān)知識,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • Go語言命令行操作命令詳細(xì)介紹

    Go語言命令行操作命令詳細(xì)介紹

    這篇文章主要介紹了Go語言命令行操作命令詳細(xì)介紹,本文重點介紹了go build、go clean、go fmt、go get等命令,需要的朋友可以參考下
    2014-10-10
  • go中sync.RWMutex的源碼解讀

    go中sync.RWMutex的源碼解讀

    本文主要介紹了go中sync.RWMutex的源碼解讀,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-04-04
  • golang使用sync.singleflight解決熱點緩存穿透問題

    golang使用sync.singleflight解決熱點緩存穿透問題

    在go的sync包中,有一個singleflight包,里面有一個?singleflight.go文件,代碼加注釋,一共200行出頭,通過?singleflight可以很容易實現(xiàn)緩存和去重的效果,避免重復(fù)計算,接下來我們就給大家詳細(xì)介紹一下sync.singleflight如何解決熱點緩存穿透問題
    2023-07-07

最新評論