Как конвертировать из [] байт в int в Go Программирование
Мне нужно создать пример клиент-сервера через TCP. На стороне клиента я читаю 2 номера, и я отправляю их на сервер. Проблема, с которой я столкнулся, заключается в том, что я не могу преобразовать из []byte
в int
, потому что сообщение принимает только данные типа []byte
.
Есть ли способ конвертировать []byte
в int
или я могу отправить int
на сервер?
Некоторые примеры кода будут действительно оценены.
Спасибо.
Ответы
Ответ 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)