2011-09-11 12 views
6

come convertire il tipo di go da uint8 a unit32? Codice
Just:Come convertire [4] uint8 in uint32 in Go?

package main 

import (
    "fmt" 
) 

func main() { 
    uInt8 := []uint8{0,1,2,3} 
    var uInt32 uint32 
    uInt32 = uint32(uInt8) 
    fmt.Printf("%v to %v\n", uInt8, uInt32) 
} 

~> 6g test.go & & 6L test.6 prova -o & & ./test
test.go: 10: non può convertire Uint8 (digitare [] uint8) per digitare uint32

+2

Non hai specificato cosa vuoi *, ecco perché ottieni risposte completamente diverse. Vuoi * uno * 'uint32' con il valore' 0x00010203', * uno * 'uint32' con il valore' 0x03020100', o * quattro * 'uint32's con i valori' {0, 1, 2, 3} '? –

risposta

14
package main 

import (
    "encoding/binary" 
    "fmt" 
) 

func main() { 
    u8 := []uint8{0, 1, 2, 3} 
    u32LE := binary.LittleEndian.Uint32(u8) 
    fmt.Println("little-endian:", u8, "to", u32LE) 
    u32BE := binary.BigEndian.Uint32(u8) 
    fmt.Println("big-endian: ", u8, "to", u32BE) 
} 

uscita:

little-endian: [0 1 2 3] to 50462976 
big-endian: [0 1 2 3] to 66051 

Le funzioni Go binary package sono implementate come una serie di turni.

func (littleEndian) Uint32(b []byte) uint32 { 
    return uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24 
} 

func (bigEndian) Uint32(b []byte) uint32 { 
    return uint32(b[3]) | uint32(b[2])<<8 | uint32(b[1])<<16 | uint32(b[0])<<24 
} 
+1

Vale anche la pena notare che se si sa che 'len (b)> = 4' e non si cura di endianness, usare' return * (* uint32) (unsafe.Pointer (& b [0])) 'è molto Più veloce. – OneOfOne

-1

Stai provando allo following?

t := []int{1, 2, 3, 4} 
s := make([]interface{}, len(t)) 
for i, v := range t { 
    s[i] = v 
} 
+0

Sebbene questo collegamento possa rispondere alla domanda, è meglio includere qui le parti essenziali della risposta e fornire il link per riferimento. Le risposte di solo collegamento possono diventare non valide se la pagina collegata cambia. –

+0

Buon suggerimento, codice aggiunto – lazy1

+0

Stai convertendo '[] int' a' [] interface {} '. Non è quello che la domanda ha chiesto. – peterSO

1

Seconda domanda: come convertire uint32 in uint8 in Go?

Voglio solo il byte di indirizzo più basso, quindi, ho incontrato la domanda. Ma non c'è una risposta al riguardo.

Questa domanda mi aiuta molto. Scrivo la mia risposta qui.

var x uint32 
x = 0x12345678 
y := uint8(x & 0xff) 

Se si desidera ottenere ogni byte di uint32, potrebbe essere necessario.

binary.BigEndian.PutUint32(buffer, Uint32Number)