【问题标题】:convert string to uint in go lang在 go lang 中将字符串转换为 uint
【发布时间】:2016-02-02 13:30:12
【问题描述】:

我正在尝试使用以下代码在 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

【问题讨论】:

    标签: go go-imagick


    【解决方案1】:

    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,则基数由 字符串的前缀: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
    

    【讨论】:

    猜你喜欢
    • 2022-10-16
    • 2011-05-11
    • 2010-09-12
    • 1970-01-01
    • 2012-08-02
    • 2019-04-29
    • 1970-01-01
    • 2016-02-24
    • 2013-10-30
    相关资源
    最近更新 更多