我将JavaScript字符串写为二进制文件,将字符串的每个字符转换为Uint16Array(2bytes),如下所示:
for(let i = 0; i < name.length; i++) {
dv.setUint16(i * 2, name.charCodeAt(i));
}
我检查了文件大小和字节数是否正确,但是当我从C读取字符串时,它会打印出意外的数字:
27904
28416
25600
25856
29184
28160
24832
29696
28416
29184
从JavaScript中读取,就像我预期的那样:
109
111
100
101
114
110
97
116
111
114
这是从文件中读取字符串的C代码:
// Read name
for(int i = 0; i < nameLen; i++) {
short int c;
fread(&c, 2, 1, fp);
printf("%d\n", c);
}
它是用于读取字符串的JavaScript代码:
for(let i = 0; i < nameLen; i++) {
let char = dv.getUint16(i * 2); // Each of character has 2 bytes
console.log(char);
}
当我尝试使用int时,它说:
117468416
117468928
117466112
117466368
117469696
117468672
117465344
117470208
117468928
117469696
据我所知,short int是2字节长度,所以理论上看起来很好,但为什么我得到那些大数字呢?
我在电脑上试过了,
printf("%d\n", sizeof(short int));
它说2。
我不擅长C,所以实际上很难找出问题所在。
任何建议都会非常感激。谢谢!
答案 0 :(得分:0)
感谢您的评论。我解决了将8位向右移动的问题,因为JavaScript的DataView将二进制文件视为默认的小端。
char name[100] = "";
for(int i = 0; i < nameLen; i++) {
short int c;
fread(&c, 2, 1, fp);
c >>= 8;
}