我正在尝试使用以下代码将字符串转换为32位ubuntu上的uint。但是它始终在uint64中转换它,尽管在函数中明确地传递了32作为参数。下面的代码mw是image magick库的对象。在调用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
答案 0 :(得分:13)
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,则表示基数 string的前缀:base 16为&#34; 0x&#34 ;, base 8为&#34; 0&#34;和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和sign的最大幅度整数。
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