JavaScript能否获得与C语言memcpy
函数相同的结果,请参见以下代码:
uint32_t value;
memcpy(&value, "00", 8);
printf('%d',val);//result is 12336
JavaScript可以打印相同的结果吗?
答案 0 :(得分:0)
function stringToBuffer(string) {
return new Uint32Array(
string.split('').map(c => c.charCodeAt(0))
);
}
console.log(stringToBuffer("00"));
答案 1 :(得分:0)
首先,C代码不符合您的预期。 %d需在其周围加上双引号,否则它将转换为整数值(至少在Linux上使用gcc时是如此)。其次,由于ASCII字符串的宽度为2个字节(可能),并且您正在从该位置复制8个字节,因此C代码给出了未定义的行为。另外,您要将4个额外的字节复制到value
的位置。这样可以读取6个额外的字节,写入4个额外的字节。由于该值存储在堆栈中,因此可能不会出现分段错误,但是从内存中读取的值将取决于编译器(并且可能会运行)。另外,您不确定要覆盖其他4个字节以及以后是否有意义(如果您有更多代码)。