2016-02-02 113 views
4

我正嘗試使用以下代碼將字符串轉換爲32位ubuntu上的uint。但它總是在uint64中轉換它,儘管在函數中明確地傳遞了32作爲參數。代碼mw中的下面是image magick庫的對象。當調用mw.getImageWidth()mw.getImageHeight()時,返回uint。此外,它接受resize函數中的uint類型參數。將字符串轉換爲uint in lang

width := strings.Split(imgResize, "x")[0] 
    height := strings.Split(imgResize, "x")[1] 

    var masterWidth uint = mw.GetImageWidth() 
    var masterHeight uint = mw.GetImageHeight() 

    mw := imagick.NewMagickWand() 
    defer mw.Destroy() 

    err = mw.ReadImageBlob(img) 
    if err != nil { 
      log.Fatal(err) 
     } 

    var masterWidth uint = mw.GetImageWidth() 
    var masterHeight uint = mw.GetImageHeight() 

    wd, _ := strconv.ParseUint(width, 10, 32) 
    ht, _ := strconv.ParseUint(height, 10, 32) 

    if masterWidth < wd || masterHeight < ht { 
    err = mw.ResizeImage(wd, ht, imagick.FILTER_BOX, 1) 
    if err != nil { 
     panic(err) 
    } 
    } 

錯誤是:

# command-line-arguments 
test.go:94: invalid operation: masterWidth < wd (mismatched types uint and uint64) 
goImageCode/test.go:94: invalid operation: masterHeight < ht (mismatched types uint and uint64) 
goImageCode/test.go:100: cannot use wd (type uint64) as type uint in argument to mw.ResizeImage 
goImageCode/AmazonAWS.go:100: cannot use ht (type uint64) as type uint in argument to mw.ResizeImage 

回答

8

Package strconv

func ParseUint

func ParseUint(s string, base int, bitSize int) (n uint64, err error) 

ParseUint就像parseInt函數但對於無符號數。

func ParseInt

func ParseInt(s string, base int, bitSize int) (i int64, err error) 

parseInt函數在給定的基座(2到36)解釋一個字符串s和返回 相應值i。如果base == 0,則基址由 字符串的前綴隱含:基址16代表「0x」,基址8代表「0」,基數爲10 否則。

bitSize參數指定結果必須符合的整數類型。位大小0,8,16,32和64分別對應於int,int8, int16,int32和int64。

ParseInt返回的錯誤具有具體類型* NumError和 包含err.Num = s。如果s爲空或包含無效數字,則err.Err = ErrSyntax且返回值爲0;如果與s對應的值不能用給定大小的有符號整數表示,則err.Err = ErrRange,返回值是相應bitSize和符號的最大幅度整數。

bitSize參數指定結果必須符合的整數類型。 uint類型大小是實現定義的,可以是32位或64位。 ParseUint返回類型始終爲uint64。例如,

package main 

import (
    "fmt" 
    "strconv" 
) 

func main() { 
    width := "42" 
    u64, err := strconv.ParseUint(width, 10, 32) 
    if err != nil { 
     fmt.Println(err) 
    } 
    wd := uint(u64) 
    fmt.Println(wd) 
} 

輸出:

42 
+0

是什麼UINT之間的區別,以及UINT32或uint和UINT64? – Naresh

+2

'uint32'爲32位,'uint64'爲64位,'uint'爲實現定義,32位或64位。請參閱[The Go Programming Language Specification:Numeric types](https://golang.org/ref/spec#Numeric_types)。 – peterSO

+0

變量需要是u32,錯誤...不是u64 =) – bsbak