【问题标题】:Converting hex format to float numbers in R将十六进制格式转换为R中的浮点数
【发布时间】:2017-01-20 13:01:28
【问题描述】:

请有人帮我,我们如何将 4 字节十六进制格式转换为 R 中的浮点数?例如,我想将 "aec7a042" 转移到 80.39 。经过大量搜索后,我在 R 中找不到任何东西给我这个转换! C 函数是 BitConverter。单身。但我需要在 R 中做同样的事情吗? 谁能帮帮我?

【问题讨论】:

  • 您能否进一步解释一下您的十六进制数字如何等于80.39
  • 其实你提到的函数不是C函数,我想你可以找到一个解决方法来读取二进制数据,这可能会有所帮助:ats.ucla.edu/stat/r/faq/read_binary.htm
  • @PierreLafortune - 它似乎适合 - 例如- gregstoll.dyndns.org/~gregstoll/floattohex - 返回相同的结果,尽管是相反的。
  • @thelatemail 我收到了0x42a0c7ae。它接近 OP,但足够清晰
  • @MrFlick 非常感谢您的帮助。 readBin 没有工作,但其他两个代码工作正常,我真的很感激。

标签: r hex


【解决方案1】:

您可以使用readBin 读取此值。看来您有一个 4 字节的有符号浮点值。你可以阅读:

readBin("aec7a042", "double", size=4)
# [1] 80.39

如果这在您的 R 版本中不起作用,请尝试

x <- "aec7a042"
readBin(as.raw(strtoi(substring(x, (step<-seq(1, nchar(x), by=2)), step+1), 16)), "double",n=1,size=4)
# or 
readBin(as.raw(strtoi(apply(matrix(strsplit(x,"")[[1]],2),2,paste, collapse=""), 16)), "double", size=4)

这里我们更明确地将字符串转换为原始字节向量。

【讨论】:

  • readBin 最近更新了吗?这在 R 3.2.4 上不起作用,关于输入需要是二进制的错误。
  • 更详细的版本是x&lt;-"aec7a042"; readBin(as.raw(strtoi(substring(x, (step&lt;-seq(1, nchar(x), by=2)), step+1), 16)), "double",n=1,size=4),使用来自stackoverflow.com/questions/29251934/…的代码
  • readBin(as.raw(strtoi(strsplit(x,"(?&lt;=..)",p=TRUE)[[1]],16)), "double", size=4) 如果你想变得花哨。
  • @thelatemail 不错。我应该想到一个正则表达式。
猜你喜欢
  • 1970-01-01
  • 2014-03-01
  • 2010-12-08
  • 1970-01-01
  • 1970-01-01
  • 2016-06-02
  • 1970-01-01
  • 2016-06-01
相关资源
最近更新 更多