c - 我如何在 Node 中模仿 C 的 CHAR 类型?

标签 c node.js

我对C不是很熟悉,但我有一个应用程序正在尝试转换为 Node (JS) .

我认为char可能与 Node 有关 new Buffer()但我对此不是 100% 确定。任何信息都将非常感谢。

我这里有这段代码:

char data[80];
unsigned long long flag=0;

mysql_real_escape_string(&mysql,data,(char*)&flag,sizeof(flag));

哪个mysql_real_escape_string应该只从 (char*)&flag) 复制数据进入data .

我想知道我是否可以这样做

var flag = 123;
var buf = new Buffer(80)
buf.writeUInt32LE(flag);

如果我 console.log(buf);我明白了

buf.toString();
'\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000��p\u0001\u0001\u0000\u0000\u0000P��\u0001\u0001\u0000\u0000\u0000\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000x��\u0001\u0001\u0000\u0000\u0000\u0005\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@��_�\u0000\u0000\u0001\u0000\u0000\u0000\u0001\u0000\u0000\u0000'

如果我 printf("%s", data);我明白了

\0@\0\0\0\0\0

任何信息都会非常感谢。

最佳答案

好吧,我不确定为什么要为这么小的数据分配这么大的缓冲区,但是在 Node 中创建 Buffer 不会初始化底层内存。因此,除了前 4 个字节被 writeUInt32LE 覆盖之外,其余的将是乱码。您应该使用 fill 来获得一致的输出。

var flag = 123;
var buf = new Buffer(80)
buf.fill(0);
buf.writeUInt32LE(flag);

当我添加 console.log(buf) 时,我得到了更可预测的输出:

<Buffer 7b 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ... >

我无法比较 C 代码段的输出,因为您的输入值似乎不匹配。根据您的描述,我认为这会更正您的输出。

关于c - 我如何在 Node 中模仿 C 的 CHAR 类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35616416/

相关文章:

c - 无法根据 C 中的 char 数组长度分配数组

c - 字符串回文函数

c - Getservent() 未从 _PATH_SERVICES 读取

node.js - 不适用于 Node js 中的 fs.readFile

javascript - 如何在谷歌应用脚​​本中使用 Node js(缓冲区)

JavaScript NodeJs 开放库

python - 排列,但有一些数字按顺序排列

c - 将字符串数组传递给要更改的函数

node.js - 如何正确设置和测试 Hapi 域和子域?

node.js - Angular 应用程序中出现警告 : 'export eedefineInjectable was not found in @angular/core'