Подтвердить что ты не робот

Как конвертировать из [] байт в int в Go Программирование

Мне нужно создать пример клиент-сервера через TCP. На стороне клиента я читаю 2 номера, и я отправляю их на сервер. Проблема, с которой я столкнулся, заключается в том, что я не могу преобразовать из []byte в int, потому что сообщение принимает только данные типа []byte.

Есть ли способ конвертировать []byte в int или я могу отправить int на сервер?

Некоторые примеры кода будут действительно оценены.

Спасибо.

4b9b3361

Ответ 1

(reposting этот ответ)

Вы можете использовать encoding/binary ByteOrder, чтобы сделать это для 16, 32, 64-разрядных типов

Play

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)
}

Ответ 2

Начиная с массива байтов вы можете использовать двоичный пакет для выполнения преобразований.

Например, если вы хотите прочитать ints:

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

Тот же пакет позволяет считывать неподписанные int или floats с желаемыми порядками байтов, используя общую функцию Read.

Ответ 3

Для кодирования/декодирования чисел в/из последовательностей байтов есть пакет encoding/binary. В документации есть примеры: см. Раздел "Примеры" в оглавлении.

Эти функции кодирования работают на интерфейсах io.Writer. Тип net.TCPConn реализует io.Writer, поэтому вы можете писать/читать напрямую в сетевых соединениях.

Если у вас есть программа Go по обе стороны от соединения, вы можете посмотреть на encoding/gob. См. Статью "" Гобы данных" для прохождого использования gob (пропустите снизу, чтобы увидеть самодостаточный пример).

Ответ 4

var bs []byte
value, _ := strconv.ParseInt(string(bs), 10, 64)