0
我寫JavaScript字符串爲二進制,要Uint16Array字符串的每個字符轉換(2字節)是這樣的:讀陣列<Uint16Array>從字符串用C
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);
}
此外,當我與詮釋試過,甾體抗炎藥:
117468416
117468928
117466112
117466368
117469696
117468672
117465344
117470208
117468928
117469696
據我所知,short int是2個字節的長度,所以在理論上看起來很好,但爲什麼我得到那些大數?
我想這在我的電腦上,
printf("%d\n", sizeof(short int));
它甾體抗炎藥2.
我不擅長C,所以實際上這是很難找到了什麼問題。
任何建議將非常感激。謝謝!
27904是十六進制0x6d00,和0x6d的十進制版本是109 – unwind
Java的專家,不要釘死我要問這個:不是Java多字節標量[大端(HTTP:/ /stackoverflow.com/questions/362384/are-integers-in-java-little-endian-or-big-endian)?這似乎是這裏的標題。你有一個BE-短被加載到使用LE的東西。 – WhozCraig
@WhozCraig你的意思是JavaScript,對吧? – unwind