我对C
不太熟悉,但我有一个应用我试图转换为Node (JS)
。
我认为char
可能与节点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
任何信息都会非常感谢。
答案 0 :(得分:2)
好吧,我不确定为什么要为这么小的数据分配如此大的缓冲区,但在Node中创建Buffer
并不会初始化底层内存。因此,除了由writeUInt32LE
覆盖的前4个字节外,其余的将是乱码。您应该使用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片段的输出,因为您的输入值似乎不匹配。根据您的描述,我认为这将纠正您的输出。