在不久的将来,我的包中将需要 64 位整数。我正在研究基于bit64
包的可行性。data.table
基本上,我计划在 S3 类中包含一个或多个列,interger64
并且我计划使用 Rcpp 将此表传递给 C++ 函数。
以下来自 Rcpp 库的nanotime 示例清楚地解释了如何在 double 向量上构建 64 位 int 向量,并解释如何创建integer64
从 C++ 到 R 的对象。
我现在想知道如何处理interger64
从 R 到 C++ 的问题。我想我可以颠倒这个原则。
void useInt64(NumericVector v)
{
double len = v.size();
std::vector<int64_t> n(len);
// transfers values 'keeping bits' but changing type
// using reinterpret_cast would get us a warning
std::memcpy(&(n[0]), &(v[0]), len * sizeof(double));
// use n in further computations
}
那是对的吗?还有另一种方法吗?我们可以使用包装器as<std::vector<int64_t>>(v)
吗?对于最后一个问题,我猜转换不是基于位到位的复制。