如何在R中转换64位十六进制字符串?

kgi*_*ibm 4 r type-conversion int64

如何在R中转换64位十六进制字符串?

> library(int64)
> as.int64("7f2d36a2a000")
[1] NA
Warning message:
In as.int64("7f2d36a2a000") : NAs introduced
> as.int64("0x7f2d36a2a000")
[1] NA
Warning message:
In as.int64("0x7f2d36a2a000") : NAs introduced
Run Code Online (Sandbox Code Playgroud)

jlh*_*ard 6

这是一种使用方式bit64.

library(bit64)
str <- "7f2d36a2a000"
as.integer64(as.numeric(paste0("0x",str)))
# integer64
[1] 139832166883328
Run Code Online (Sandbox Code Playgroud)

  • 小心这一点。`as.numeric` 是双精度的,只有 53 个精度位。因此,它可能会在最后一位数字中引入舍入误差! (3认同)

Jos*_*ien 5

对于很大的数字,您需要加载一个支持任意大数字表示形式的包。Rmpfr是一个示例:

library(Rmpfr)

## Check that it works as expected on smaller numbers:
strtoi("ff", base=16)
# [1] 255
mpfr("ff", base=16)
# 1 'mpfr' number of precision  8   bits 
# [1] 255
as.integer(mpfr("ff", base=16)
# [1] 255

## Then apply it with (more) confidence to larger numbers: 
mpfr("7f2d36a2a000", base=16)
# 1 'mpfr' number of precision  48   bits 
# [1] 139832166883328
mpfr("7f2d36a2a0007f2d36a2a0007f2d36a2a0007f2d36a2a000", base=16)
# 1 'mpfr' number of precision  192   bits 
# [1] 3118361524223520784583964884878580812558070356334996529152
Run Code Online (Sandbox Code Playgroud)