30

我正在尝试使用以下代码在 32 位 ubuntu 上将字符串转换为 uint。但它总是将其转换为 uint64,尽管在函数中显式传递 32 作为参数。下面的代码 mw 是图像魔法库的对象。uint何时返回,mw.getImageWidth()并被mw.getImageHeight()调用。此外,它接受resize函数 uint中的类型参数。

    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
4

1 回答 1

40

包 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,则字符串的前缀隐含了 base:base 16 表示“0x”,base 8 表示“0”,否则为 base 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
于 2016-02-02T13:32:20.343 回答