微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将 uint8 转换为 int

如何解决将 uint8 转换为 int

将 uint8 转换为普通 int 的最佳方法是什么 我想用 rgb 直方图做一些工作,但我在这里找不到最后一块的正确方法(更新为 rm stbi lib)

unrecognized rule

我想过将 r1 转换为字符串,然后执行 parseInt() 之类的操作,但这似乎不合常理。有没有更干净的方法

这里是编译器错误

proc obc*(image1,image2: string) =
  type IntArray = array[24,int]
  var
    r24: IntArray
  let f:float = 24/256
  var
    data1: seq[uint8]
  #data1 = stbi.load(image1,w,h,c,stbi.Default) #uint8

  for i in countUp(0,data1.len - 3,step = 4):
    let
      r1: uint8 = data1[i]
    r24[ (int)(r1*f) ] = r24[(int)(r1*f)] + 1

解决方法

你的错误是忘记了 Nim 是强类型的。您尝试将 uint8 与浮点数相乘。要么将 float 与 float 相乘,要么将 uint8 与 uint8 相乘。有例外,请参阅:https://nim-lang.org/docs/manual.html#type-relations-convertible-relation

以下是将 uint8 转换为浮点数的示例:

let x = 1'u8
let y = float(x)
let z = x.float

浮动到 uint8:

let x = 1.0
let y = uint8(x)
let z = x.uint8

编译的代码示例,但我不知道这是否是您想要的结果:

proc obc*(image1,image2: string) =
  type IntArray = array[24,int]
  var
    r24: IntArray
  let f:float = 24/256
  var
    data1: seq[uint8]
  #data1 = stbi.load(image1,w,h,c,stbi.Default) #uint8

  for i in countUp(0,data1.len - 3,step = 4):
    let
      r1: uint8 = data1[i]
      
    r24[int(r1 * uint8(f))] = r24[int(r1 * uint8(f))] + 1
,

好吧,看来我的代码比我想象的要糟糕 通过将这一行从

r1: uint8 = data1[i]

r1: float = (float)data1[i]

编译错误消失了。我原以为这是 uint8 的问题,但不是。这只是一个简单的 float int 不匹配,需要额外的转换。

所以可能原来的建议是对的,这种事情没问题

var u: uint8 = 8
var i: int = (int) u

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。