我可以获得R float的字节表示吗?

Spa*_*man 8 floating-point r

我正在尝试读取具有浮点值的复杂数据文件.已经提供了一些处理这种格式(Met Office PP文件)的C代码,并且它做了很多小事和交换.它不起作用.它得到了很多权利,比如数据的大小,但返回矩阵中的数值是无意义的,有NaN和像1e38和-1e38这样的值被大量洒落.

但是,我有一个二进制exe("convsh")可以将这些转换为netCDF,并且netCDF看起来很好 - 风速很好的旋涡图.

我在想的是PP文件的字节是以错误的顺序读入的.如果我可以将netCDF数据中正确返回的浮点数的字节与从C代码错误地返回的浮点数中的字节进行比较,那么我可能会找出正确的swappage.

那么是否有一个普通的R函数来转储浮点数的四个(或八个?)字节?就像是:

> as.bytes(pi)
[1] 23 54 163 73 99 00 12 45 # made up values
Run Code Online (Sandbox Code Playgroud)

搜索"bytes"和"float"和"binary"没有帮助.

它在C中的微不足道,我可能已经把它写在我写这篇文章的时候......

Mat*_*rde 8

rdyncall可能会给你你想要的东西:

library(rdyncall)
as.floatraw(pi)
# [1] db 0f 49 40
# attr(,"class")
# [1] "floatraw"
Run Code Online (Sandbox Code Playgroud)

或许writeBin(pi, raw(8))

  • `writeBin`是解决方案.`as.floatraw`转换为4字节的单精度. (2认同)

Dir*_*tel 6

是的,这必须存在于序列化代码中,因为R快乐地通过线路发送内容,同时处理字节序.您是否看过Rserve使用它,或者digest如何将char表示传递给选定的哈希函数?

快速浏览一下后digest.R:

R> serialize(pi, connection=NULL, ascii=TRUE)
 [1] 41 0a 32 0a 31 33 34 39 31 34 0a 31 33 31 38 34 30 0a
[19] 31 34 0a 31 0a 33 2e 31 34 31 35 39 32 36 35 33 35 38
[37] 39 37 39 33 0a
Run Code Online (Sandbox Code Playgroud)

R> serialize(pi, connection=NULL, ascii=FALSE)
 [1] 58 0a 00 00 00 02 00 02 0f 02 00 02 03 00 00 00 00 0e
[19] 00 00 00 01 40 09 21 fb 54 44 2d 18
R> 
Run Code Online (Sandbox Code Playgroud)

那可能会让你前进.

来考虑一下,这包括标题元数据.