读取数组<;UINT16阵列>;C中字符串的字符代码
我以二进制形式编写JavaScript字符串,将字符串的每个字符转换为UINT16数组(2字节),如下所示:读取数组<;UINT16阵列>;C中字符串的字符代码,c,typed-arrays,C,Typed Arrays,我以二进制形式编写JavaScript字符串,将字符串的每个字符转换为UINT16数组(2字节),如下所示: for(let i = 0; i < name.length; i++) { dv.setUint16(i * 2, name.charCodeAt(i)); } 从JavaScript中读取,如我所料,如下所示: 109 111 100 101 114 110 97 116 111 114 这是从文件中读取字符串的C代码: // Read name for(int i
for(let i = 0; i < name.length; i++) {
dv.setUint16(i * 2, name.charCodeAt(i));
}
从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);
}
正如我所知,short int是2字节的长度,所以理论上看起来很好,但为什么我会得到这些大数字呢 我在电脑上试过这个
printf("%d\n", sizeof(short int));
上面写着2
我不擅长C,所以实际上很难找出问题所在
任何建议都将不胜感激。谢谢大家! 谢谢您的评论。我解决了将8位向右移位的问题,因为JavaScript的DataView编写的二进制文件与默认值一样少
char name[100] = "";
for(int i = 0; i < nameLen; i++) {
short int c;
fread(&c, 2, 1, fp);
c >>= 8;
}
char name[100]=“”;
for(int i=0;i>=8;
}
27904是十六进制0x6d00,而0x6d的十进制版本是109。Java专家们,不要因为问这个问题而责怪我:Java不是多字节标量吗?这似乎就是我们的方向。在加载到使用LE的东西时,可能会出现一个short。@WhozCraig是指JavaScript,对吗?“我知道,short int是2字节长度”——这不是保证。不要依赖它,使用正确的位移位和位运算编组。这里有足够的问答,做一些研究。
117468416
117468928
117466112
117466368
117469696
117468672
117465344
117470208
117468928
117469696
printf("%d\n", sizeof(short int));
char name[100] = "";
for(int i = 0; i < nameLen; i++) {
short int c;
fread(&c, 2, 1, fp);
c >>= 8;
}