web-dev-qa-db-ja.com

go langで文字列をuintに変換する

次のコードを使用して、32ビットubuntuで文字列をuintに変換しようとしています。ただし、関数の引数として明示的に32を渡しても、常にuint64で変換されます。以下のコードのmwは image magick ライブラリのオブジェクトです。 mw.getImageWidth()およびmw.getImageHeight()が呼び出されたときにuintを返します。また、 resize 関数でuint type引数を受け入れます。

    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
16
Naresh

パッケージ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の場合、ベースは文字列の接頭辞によって暗示されます。「0x」の場合はベース16、「0」の場合はベース8、それ以外の場合はベース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
18
peterSO