读取数组<;UINT16阵列>;C中字符串的字符代码

读取数组<;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

我以二进制形式编写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 = 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;
}