c++ - llvm:将 i8* 类型值转换为 double 类型值
问题描述
我有一个 char 指针 (Type::getInt8PtrTy(Context) ) 并尝试将保存该指针的值( 换句话说,字符串) 转换为双精度类型 (Type::getDoubleTy(Context))。我尝试的方法是:
Value* stringValue = ... // Value which type Type::getInt8PtrTy(Context)
auto doubleValue = CastInst::CreatePointerCast(stringValue, Type::getDoubleTy(Context), Builder.GetInsertBlock());
AllocaInst *alloca = .. //alloc memory for element which type is Type::getDoubleTy(Context)
Builder.CreateStore(doubleValue, alloca);
问题是当我尝试使用外部 C 函数 (printf) 打印 doubleValue 时,看起来我得到了地址但没有 double 值。换句话说,我想编写与 C atoi 函数一样的代码。我正在使用 C++ API。
我将不胜感激。
解决方案
atoi
不只是将变量转换为不同的类型。它实际上是通过某种算法将字符串值转换为整数。
如果你想做同样的事情,你必须在你的位码中包含一个实现该算法的函数,然后call
在你的指针上使用指令来获取double
值。
如果您真的想将字符串的数据解释为双精度,请使用bitcast
将指针从i8*
to 转换为double*
然后使用load
指令。
推荐阅读
- c# - 合并两个 PdfDocument 对象
- c - 双字段的 calloc() 是否总是计算为 0.0?
- three.js - How to respond differently to ray casting? (VR)
- python - 捕获所有异常以便在部署我的应用程序后更轻松地进行调试
- jquery - 使用打字头时无法在多重搜索中输出所有值 (RunningCoder)
- java - 无法使用 MS SQL 2016 连接到 Hibernate
- android - 使用 react-navigation 抽屉在 iOS 上 React Native 崩溃
- azure - 尝试让 Azure Kubernetes 服务使用服务中的集群负载均衡器时出错
- html - img div 不适合 CSS 网格单元格
- python-3.x - 如何从运行在 kubernetes 上的 spark 集群(2.1)查询 hdfs?