Я пытаюсь преобразовать int16 в массив байтов, но я не могу заставить его работать.
Вот что я получил прямо сейчас:
int16 i := 41
a := []byte(string(i))//this line is wrong
Также, если кто-то задается вопросом, что массив должен быть длиной 2.
Ответ 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)