Int16 to byte array - программирование
Подтвердить что ты не робот

Int16 to byte array

Я пытаюсь преобразовать int16 в массив байтов, но я не могу заставить его работать.
Вот что я получил прямо сейчас:

int16 i := 41
a := []byte(string(i))//this line is wrong

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

4b9b3361

Ответ 1

Если вы хотите получить байты int16, попробуйте что-то вроде этого:

var i int16 = 41
var h, l uint8 = uint8(i>>8), uint8(i&0xff)

Go пытается затруднить запись программ, зависящих от атрибутов вашей платформы, таких как порядок байтов. Отсюда следует, что запрет типа punning, который приводит к таким зависимостям (например, наложение байтового массива с int16).

Если вы действительно хотите стрелять в ногу, попробуйте пакет unsafe.

Ответ 2

В то время как ответ FUZxxl работает, вы также можете использовать кодировку/двоичный пакет:

var i int16 = 41
b := make([]byte, 2)
binary.LittleEndian.PutUint16(b, uint16(i))

В кодировке/бинарном пакете есть готовые функции для кодирования маленького и большого endian для всех фиксированных целых чисел и некоторые простые в использовании функции, если вы используете Readers and Writers вместо байтовых фрагментов. Пример:

var i int16 = 41
err := binary.Write(w, binary.LittleEndian, i)