在go lang中将字符串转换为uint

pn9klfpd  于 2023-02-01  发布在  Go
关注(0)|答案(2)|浏览(1054)

我试着在32位ubuntu上用下面的代码把字符串转换成uint,但是它总是用uint64来转换,尽管函数中明确地传递了32作为参数,下面的代码mw是image magick库的对象,当mw.getImageWidth()mw.getImageHeight()被调用时,它返回uint,另外,它接受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
vcudknz3

vcudknz31#

Package strconv
函数解析单元

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

ParseUint与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、int 8、int 16、int 32和int 64。
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
8e2ybdfx

8e2ybdfx2#

下面是一个将string转换为uint的简单方法。

import (
    "strconv"
)

...

func StringToUint(s string) uint {
    i, _ := strconv.Atoi(s)
    return uint(i)
}

相关问题