erlang - Erlang NIF 奇怪的 iolist 行为
问题描述
我刚开始尝试使用 Erlang NIFS 并遇到了这个问题,我想知道是否有什么可以解决的。
这是NIF:
#include "erl_nif.h"
static ERL_NIF_TERM test_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{
ErlNifBinary binary;
if (!enif_inspect_iolist_as_binary(env, argv[0], &binary)) {
return enif_make_badarg(env);
}
printf("%s\n", binary.data);
return enif_make_int(env, 0);
}
static ErlNifFunc nif_funcs[] = {
{"test", 1, test_nif}
};
ERL_NIF_INIT(nif_test, nif_funcs, NULL, NULL, NULL, NULL)
以及当我从 erlang 调用函数时的一些输出:
nif_test:test(<<"helló">>). % hell?
nif_test:test(<<"áéíóöőüű">>). % ?????Q?q
nif_test:test("hello"). % helloErlU?
nif_test:test(""). % xc?
nif_test:test("out"). % outg", "U?
至少让二进制字符串正常工作会很好。有任何想法吗?
编辑:我忘记了我真正需要的是char *
C 程序中作为字符串 () 的数据,所以我可能一开始就错了。
解决方案
前两个是因为printf
不尊重您在 Erlang 源文件中使用的任何字符编码(可能是 UTF-8)。
其余的是因为ErlNifBinary
不是空终止的。你也需要注意binary.size
。像这样的东西:
printf("%.*s", binary.size, binary.data);
推荐阅读
- php - 为什么正则表达式匹配“:www.xxx.com”
- scala - Spark Scala - 使用密钥对通过 SSH 连接到 MySQL
- excel - 使用 VBA 将 URL 文件查询中的数据导入 Excel 工作表
- vba - 根据VBA上的行号突出显示单元格
- scrapy - 为什么我不能将scrapy与https的代理一起使用
- javascript - PHP 文件报告成功但 MySQL 数据库未更新
- r - 在 R 中使用正则表达式捕获特定的 JSON-LD 属性
- haskell - Haskell 镜头 - 棱镜组合
- python - RuntimeError:尺寸不匹配,m1:[672 x 224],m2:[672 x 224]
- java - 使用 java 的 AWS 电子邮件模板使用(批量电子邮件)