我对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/