我正在使用 LLVM 绑定(bind)来读取 OCaml 中的 LLVM 位码文件。在该文件中有一个全局字符串常量定义如下:
@.str1 = private unnamed_addr constant [6 x i8] c"x > y\00", align 1
我有一个 llvalue
对应于这个常量,我想从中获取字符串 "x > y"
。我可以做的一件事是使用 string_of_llvalue (global_initializer the_constant)
获取字符串 "c\"x > y\\00\""
,然后提取之间的部分引号,然后解析该部分中的转义序列。然而,这对我来说似乎不是一个很好的解决方案。
C++ API 具有函数 constantDataSequential::getAsString
,我可以使用它来访问常量的字符串值,但我终究无法弄清楚如何使用OCaml 绑定(bind)。
最佳答案
在提问时,解析 string_of_llvalue
的结果确实是除了为 getAsString
编写自己的绑定(bind)之外的唯一选择。
然而,在更新的 OCaml 绑定(bind)版本中,这可以通过 string_of_const
更容易地完成。如果给定的 llvalue
是字符串常量且 None
,它需要一个 llvalue
并返回一个包含字符串内容的 Some
否则。
关于ocaml - 从 LLVM 字符串常量中获取字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25086659/