web-dev-qa-db-ja.com

Goプログラミングで[] byteからintに変換する方法

TCPを介してクライアントサーバーの例を作成する必要があります。クライアント側で2つの数値を読み取り、それらをサーバーに送信します。私が直面した問題は、通信が[]byte型のデータのみを受け入れるため、[]byteからintに変換できないことです。

[]byteintに変換する方法はありますか、またはintをサーバーに送信できますか?

いくつかのサンプルコードは本当にありがたいです。

ありがとう。

59
Emanuel

(再投稿 この回答

エンコード/バイナリの ByteOrder を使用して、16、32、64ビットタイプでこれを行うことができます。

再生

package main

import "fmt"
import "encoding/binary"

func main() {
    var mySlice = []byte{244, 244, 244, 244, 244, 244, 244, 244}
    data := binary.BigEndian.Uint64(mySlice)
    fmt.Println(data)
}
63
David Budworth

バイト配列から開始して、変換を行うために binary package を使用できます。

たとえば、intを読みたい場合:

buf := bytes.NewBuffer(b) // b is []byte
myfirstint, err := binary.ReadVarint(buf)
anotherint, err := binary.ReadVarint(buf)

同じパッケージでは、一般的な Read 関数を使用して、必要なバイト順序でunsigned intまたはfloatを読み取ることができます。

10
Denys Séguret

バイトシーケンスとの間で数値をエンコード/デコードするには、 encoding/binary パッケージがあります。ドキュメントには例があります。目次の「例」セクションを参照してください。

これらのエンコード関数は io.Writer インターフェイスで動作します。 net.TCPConn タイプはio.Writerを実装するため、ネットワーク接続への直接の書き込み/読み取りが可能です。

接続の両側にGoプログラムがある場合は、 encoding/gob の使用を検討することをお勧めします。 gobの使用方法については、記事「 Gobs of data 」を参照してください(自己完結型の例を見るには、下にスキップしてください)。

6
axw

[] byteがASCIIバイト数)の場合、最初に[] byteを文字列に変換し、文字列をintに変換するstrconv package Atoiメソッドを使用します。

package main
import (
    "fmt"
    "strconv"
)

func main() {
    byteNumber := []byte("14")
    byteToInt, _ := strconv.Atoi(string(byteNumber))
    fmt.Println(byteToInt)
}

遊び場に行く- https://play.golang.org/p/gEzxva8-BGP

2
Tinkal Gogoi