2016-02-02 75 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