web-dev-qa-db-fra.com

convertir la chaîne en uint dans go lang

J'essaie de convertir la chaîne en uint sur ubuntu 32 bits en utilisant le code suivant. Mais il le convertit toujours en uint64 bien qu'il passe explicitement 32 comme argument dans la fonction. Ci-dessous dans le code mw se trouve l'objet de la bibliothèque image magick . Qui renvoie uint lorsque mw.getImageWidth() et mw.getImageHeight() est appelé. En outre, il accepte l'argument de type uint dans la fonction resize .

    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)
    } 
   }

L'erreur est:

# 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

Paquet strconv

func ParseUint

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

ParseUint est comme ParseInt mais pour les nombres non signés.

func ParseInt

func ParseInt(s string, base int, bitSize int) (i int64, err error)

ParseInt interprète une chaîne s dans la base donnée (2 à 36) et renvoie la valeur correspondante i. Si base == 0, la base est impliquée par le préfixe de la chaîne: base 16 pour "0x", base 8 pour "0" et base 10 sinon.

L'argument bitSize spécifie le type entier dans lequel le résultat doit tenir. Les tailles de bits 0, 8, 16, 32 et 64 correspondent à int, int8, int16, int32 et int64.

Les erreurs renvoyées par ParseInt sont de type concret * NumError et incluent err.Num = s. Si s est vide ou contient des chiffres invalides, err.Err = ErrSyntax et la valeur renvoyée est 0; si la valeur correspondant à s ne peut pas être représentée par un entier signé de la taille donnée, err.Err = ErrRange et la valeur renvoyée est l'entier de magnitude maximale du bitSize et du signe appropriés.

L'argument bitSize spécifie le type entier dans lequel le résultat doit tenir. La taille de type uint est définie par l'implémentation, soit 32 ou 64 bits. Le type de retour ParseUint est toujours uint64. Par exemple,

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)
}

Production:

42
18
peterSO