2011-09-11 3 views
6

go 유형을 uint8에서 unit32로 변환하는 방법은 무엇입니까?
그냥 코드 :[4] uint8을 Go에서 uint32로 변환하는 방법?

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 & & 6리터 -o 테스트 test.6 & & ./test
test.go : 10 : UINT8을 변환 할 수 없습니다에 ([] UINT8 입력) UINT32 입력

+2

당신이 * 원하는 * 것을 지정하지 않았으므로 완전히 다른 답변을 얻을 수 있습니다. 값이 '0x00010203', * 1 *'uint32', 값이'0x03020100' 또는 * 4 *'uint32's 값이 '{0, 1, 2, 3} 인 * 1 *'uint32' '? –

답변

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) 
} 

출력 :

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

Go binary package 함수는 일련의 교대로 구현됩니다.

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

만약'len (b)> = 4'이고 endianness에 관심이 없다면'return * (* uint32) (unsafe.Pointer (& b [0]))'을 사용하는 것이 많은 빠릅니다. – OneOfOne

-1

following?

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

이 링크는 질문에 대답 할 수 있지만 답변의 핵심 부분을 여기에 포함시키고 참조 용 링크를 제공하는 것이 좋습니다. 링크 된 페이지가 변경되면 링크 전용 답변이 유효하지 않게 될 수 있습니다. –

+0

좋은 제안, 코드 추가 – lazy1

+0

'[] int'를'[] interface {}'로 변환 중입니다. 그 질문에 대한 질문이 아닙니다. – peterSO

1

반대 질문 : uint32를 Go에서 uint8로 변환하는 방법?

나는 가장 낮은 주소 바이트를 원한다. 그래서 나는 질문을 만난다. 하지만 그것에 대한 대답은 없습니다.

이 질문은 많은 도움이됩니다. 나는 내 대답을 여기에 적는다.

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

uint32의 각 바이트를 얻으려면이 기능이 필요할 수 있습니다.

binary.BigEndian.PutUint32(buffer, Uint32Number) 
관련 문제