javaer to go之byte類型轉換

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

在Socket的Server和Client通訊的過程中,傳輸的都是位元組。而我們需要展示和使用的是字串、整形等。這個時候,我們需要對位元組進行處理,把byte類型的資料轉成我們需要的類型。

1、[]byte與16進位字串

  • []byte轉16進位字串
import (    "bytes"    "strconv")//byte轉16進位字串func ByteToHex(data []byte) string {    buffer := new(bytes.Buffer)    for _, b := range data {        s := strconv.FormatInt(int64(b&0xff), 16)        if len(s) == 1 {            buffer.WriteString("0")        }        buffer.WriteString(s)    }    return buffer.String()}

因為要做字串的拼接,所以我們通過bytes工具聲明一個buffer,把strconv.FormatInt格式化單個byte的字串寫入buffer流中。

  • 16進位字串轉[]byte
import (    "strconv")//16進位字串轉[]bytefunc HexToBye(hex string) []byte {    length := len(hex) / 2    slice := make([]byte, length)    rs := []rune(hex)    for i := 0; i < length; i++ {        s := string(rs[i*2 : i*2+2])        value, _ := strconv.ParseInt(s, 16, 10)        slice[i] = byte(value & 0xFF)    }    return slice}

通過把字元快速地轉成rune類型地方式形成數組,然後在迴圈裡兩位兩位地再拼成字串。
使用strconv.ParseInt把16進位的字串轉成10進位的整形。
最後再把整形轉成byte放入切片中。

2、byte與unit8

很簡單,golang中byte和unit8都是8位的,直接轉換就可以。

  • byte轉unit8
i := uint8(b)
  • unit8轉byte轉
var i uint8i = 1b := byte(i)

3、byte[]與unit

位元組與16位、32位及64位無符號整形之前的轉換可使用”encoding/binary”包下的BigEndian(高位編址)與LittleEndian(低位編址)來操作,他們都實現了ByteOrder介面。提供了8位以上的無符號整形與byte數組之前的轉換介面。

type ByteOrder interface {    Uint16([]byte) uint16    Uint32([]byte) uint32    Uint64([]byte) uint64    PutUint16([]byte, uint16)    PutUint32([]byte, uint32)    PutUint64([]byte, uint64)    String() string}

如我們把一個byte數組轉成16位的無符號整形:

runningNumber := binary.BigEndian.Uint16(data[34:36])

初學者注意:

在[]byte與uint轉換的過程中,得確定[]byte的長度與類型的類型是否匹配。因為兩者的轉換是通過位移來實現的。

encoding/binary的部分源碼:

func (bigEndian) Uint16(b []byte) uint16 { return uint16(b[1]) | uint16(b[0])<<8 }func (bigEndian) PutUint16(b []byte, v uint16) {    b[0] = byte(v >> 8)    b[1] = byte(v)}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.