2016-06-24 5 views
5

У меня есть следующий массив байтов:Ввод int8 в массив байтов

buf := make([]byte, 1) 
var value int8 
value = 45 
buf[0] = value // cannot use type int8 as type []byte in assignment 

И когда я хочу поставить значение обугленного в массив байтов Я получаю ошибку, что я cannot use type int8 as type []byte in assignment. Что не так? Как мне это сделать?

+0

не знаю много о 'go' но вы либо случайно сделал массив в массив? Или попробуйте сначала наложить int8 на байт. – Doomsknight

+0

Возможный дубликат [Преобразование целого в массив байтов] (http://stackoverflow.com/questions/16888357/convert-an-integer-to-a-byte-array) –

ответ

1

Попробуйте это:

buf := make([]byte, 1) 
var value int8 
value = 45 
buf[0] = byte(value) 

UPDATE: Достал код преобразования отрицательных чисел на положительные. Похоже, что byte(...) уже выполняет это преобразование в текущих версиях Go.

+1

Не нужно это «сложное» преобразование, простой 'byte (value)' дает тот же результат. – icza

+0

Похоже, вы правы! Интересно, что здесь что-то изменилось ... Я нашел более старый ресурс, в котором говорилось о необходимости сначала преобразовать в положительное число. – smarx

+0

Не было никаких изменений. Или старый источник был неправильным, или, возможно, это связано с другим языком? Или, возможно, это включало постоянные выражения ... – icza

2

Вопрос, который у вас есть, заключается в том, что хотя int8 и byte примерно эквивалентны, они не одного типа. Go немного более строг, чем, скажем, PHP (что не так уж и сложно). Вы можете обойти это явно заливкой значение byte:

buf := make([]byte, 1) 
var value int8 
value = 45 
buf[0] = byte(value) // cast int8 to byte 
+1

Стоит отметить, что 'byte' является просто псевдонимом для' uint8' в Go. Это означает, что основное отличие состоит в том, что вы пытаетесь сохранить подписанное значение в слоте без знака. Если вы укажете «uint8» или, используя, в первую очередь, uint8, это работает без необходимости приведения типа «byte». Пример: https://play.golang.org/p/XzQ7eWOS16 – Kaedys