如何在Cassandra C++DataStax中绑定十进制类型
How to bind decimal type in Cassandra C++ DataStax
我正在使用DataStax Cassandra驱动程序我正在尝试将行插入到cassandra表中。如果表为十进制类型,则为其中一列。我的查询是
插入表格(id,price)值(?,?)
我准备语句cass_session_prepare,然后绑定cass_statement_bind_int32_by_name id。
当我尝试绑定十进制时,问题就开始了。该方法的原型是
CassError cass_statement_bind_decimal ( statement, index, varint, varint_size, scale )
其中,variant是指向字节的指针,variant_size是字节数,scale是小数位数。
所以,最后我的问题是,如何计算我应该传递给该方法的字节数组的内容?首先,我天真地认为,如果我只传递一个数字的字符表示("1234.56"),它就会起作用。但我当然不工作。现在我明白了,我应该传递的字节数组在Java中被称为BigInteger。但是我不知道如何将字符串或double转换为这个BigInteger数组。我不认为Cassandra驱动程序API提供了任何可以帮助我转换的东西。所以,如果有人能帮助我解决这个问题,我将非常感谢
有许多库可以用来执行转换:
- GNU多精度算术库(GMP)
- 多精度整数与有理数(MPIR)
- 助推。多精度
- OpenSSL BIGNUM
- 其他多精度库
如果您查看DataStax C/C++驱动程序的集成测试,您会发现一个利用OpenSSL BIGNUM库的基本BigNumber实现。此实现不执行算术运算,但允许您轻松地将字节数组(带小数位数)转换为BigNumber以进行比较和显示。
注意:众所周知,OpenSSL BIGNUM实现比许多其他库慢。更完整的实现可以在使用GMP库的DataStax PHP驱动程序GitHub存储库中找到。
相关文章:
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 在基于范围的for循环中使用结构化绑定声明
- 使用 LuaBridge 将 LuaJIT 绑定到C++会导致"PANIC: unprotected error"
- 尝试通过OCI例程从Oracle获取blob数据,但出现错误:ORA-01008:并非所有变量都绑定
- 在使用GPU支持编译Tensorflow时,会遇到CUDA_TOOLKIT_PATH未绑定变量
- 视觉studo 2019中的漫画和静态/动态绑定
- 将自由函数绑定为类成员函数
- 将常量指针引用绑定到非常量指针
- 在派生类中绑定非静态模板化成员函数
- 绑定派生类方法C++从实例范围之外的分隔 std::function 变量调用
- 在 openGL 中多次绑定缓冲区
- 定义有趣的宏和正则表达式在Z3 C++绑定
- 使用结构化绑定'Reflection'
- 为什么 std::绑定错误参数可以成功?
- 如何绑定 C++ gRPC 客户端的网络接口
- 在 openmp 中,omp_get_thread_num是否绑定到物理线程?
- C++绑定(已弃用)
- 运行时错误:引用绑定到类型为"int"的空指针
- 有没有办法将重载的类函数绑定到函数对象?
- 如何在Cassandra C++DataStax中绑定十进制类型