2016-06-24 9 views
5

Ho il seguente array di byte:Mettere int8 in array di byte

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

E quando voglio mettere un valore char in array di byte ottengo l'errore che ho cannot use type int8 as type []byte in assignment. Cosa c'è che non va? Come faccio a fare questo?

+0

non so molto di 'go' ma hanno si sia accidentalmente fatto un array di un array? Oppure prova prima a lanciare int8 a byte. – Doomsknight

+0

Possibile duplicato di [Converti un numero intero in un array di byte] (http://stackoverflow.com/questions/16888357/convert-an-integer-to-a-byte-array) –

risposta

1

Prova questa:

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

UPDATE: tirò fuori il codice di conversione dei numeri negativi a quelli positivi. Sembra che byte(...) effettui già questa conversione nelle versioni correnti di Go.

+1

Non serve questa conversione "difficile", un semplice 'byte (valore)' dà lo stesso risultato. – icza

+0

Sembra che tu abbia ragione! Mi chiedo se qualcosa è cambiato qui ... Ho trovato una risorsa più vecchia che ha espresso la necessità di convertire prima un numero positivo. – smarx

+0

Non ci sono stati cambiamenti. O la vecchia fonte non era corretta, o forse si riferiva ad un'altra lingua? O forse includeva espressioni costanti ... – icza

2

Il problema che si sta verificando è che anche se int8 e byte sono equivalenti, non sono dello stesso tipo. Go è un po 'più severo su questo rispetto, per esempio, a PHP (che non è molto rigido). È possibile aggirare il problema lanciando esplicitamente il valore di byte:

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

Vale la pena notare che 'byte' è solo un alias per' uint8' in Go. Ciò significa che la differenza principale è che stai cercando di memorizzare un valore firmato in uno slot senza segno. Il typecasting di 'uint8', o l'uso di uint8 in primo luogo, funziona per questo senza bisogno di un typecast' byte'. Esempio: https://play.golang.org/p/XzQ7eWOS16 – Kaedys