I’m trying to read in a complicated data file that has floating point values. Some C code has been supplied that handles this format (Met Office PP file) and it does a lot of bit twiddling and swapping. And it doesn’t work. It gets a lot right, like the size of the data, but the numerical values in the returned matrix are nonsensical, have NaNs and values like 1e38 and -1e38 liberally sprinkled.
However, I have a binary exe (“convsh”) that can convert these to netCDF, and the netCDFs look fine – nice swirly maps of wind speed.
What I’m thinking is that the bytes of the PP file are being read in in the wrong order. If I could compare the bytes of the floats returned correctly in the netCDF data with the bytes in the floats returned wrongly from the C code, then I might figure out the correct swappage.
So is there a plain R function to dump the four (or eight?) bytes of a floating point number? Something like:
> as.bytes(pi)
[1] 23 54 163 73 99 00 12 45 # made up values
searches for “bytes” and “float” and “binary” haven’t helped.
Its trivial in C, I could probably have written it in the time it took me to write this…
rdyncall might give you what you’re looking for:
Or maybe
writeBin(pi, raw(8))?