2011-09-11 8 views
6

गो के प्रकार को uint8 से unit32 में कैसे परिवर्तित करें?
बस कोड:गो 4 में uint32 में 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) 
} 

~> 6 ग्राम test.go & & 6l -ओ परीक्षण test.6 & & ./test
test.go: 10: uInt8 परिवर्तित नहीं कर सकते (प्रकार [] uint8) करने के लिए टाइप uint32

+2

आपने यह निर्दिष्ट नहीं किया कि आप क्या चाहते हैं *, यही कारण है कि आप पूरी तरह से अलग जवाब प्राप्त करते हैं। क्या आप '0x00010203' मान के साथ * एक *' uint32' चाहते हैं, * एक * 'uint32' मान' 0x03020100' के साथ, या * चार * 'uint32' मानों के साथ '{0, 1, 2, 3} '? –

उत्तर

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 

गो 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

यह भी ध्यान देने योग्य है कि यदि आप जानते हैं कि 'लेन (बी)> = 4' और' वापसी * ​​(* 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' से' [] इंटरफेस {} 'में परिवर्तित कर रहे हैं। सवाल यह नहीं है कि सवाल क्या है। – peterSO

1

विपरीत प्रश्न: uint32 को uint8 में कैसे परिवर्तित करें?

मुझे बस सबसे कम पता बाइट चाहिए, तो, मैं सवाल पूछता हूं। लेकिन इसके बारे में कोई जवाब नहीं है।

यह प्रश्न मुझे बहुत मदद करता है। मैं अपना जवाब यहां लिखता हूं।

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

यदि आप uint32 के प्रत्येक बाइट प्राप्त करना चाहते हैं, तो आपको इसकी आवश्यकता हो सकती है।

binary.BigEndian.PutUint32(buffer, Uint32Number) 
संबंधित मुद्दे