回答編集履歴
2
update
test
CHANGED
@@ -5,3 +5,19 @@
|
|
5
5
|
Windows環境のテキストモードでは、LF(`\n`)/0x0A は CR+LF(`\r`+`\n`)/0x0D+0x0A という2バイトへと変換されてしまいます。バイナリデータを出力するときは、バイナリモードの指定は必須です。C言語プログラムとしての**致命的な**バグですから、原則としてC言語プログラム側を**修正すべき**です。
|
6
6
|
|
7
7
|
|
8
|
+
|
9
|
+
---
|
10
|
+
|
11
|
+
|
12
|
+
|
13
|
+
> しかし、今回のケースではCのプログラムには変更を加えられません。
|
14
|
+
|
15
|
+
> このソースで書かれたデータをNode.jsが解釈する方法はありますか?
|
16
|
+
|
17
|
+
|
18
|
+
|
19
|
+
残念ながら、Node.js側で正しく復号(解釈)するのはおそらく**不可能**です。
|
20
|
+
|
21
|
+
|
22
|
+
|
23
|
+
復号処理は「バイト並び0x0D+0x0Aを0x0Aへと戻す」のですが、正しいオリジナルデータの時点で0x0D+0x0Aの場合も**誤って**0x0Aへと逆変換してしまいます。言い換えると、ファイルに0x0D+0x0Aバイト並びがあったとき、それがオリジナルの0x0D+0x0Aという2バイトだったのか、0x0Aという1バイトだったのかを判断する手段がありません。何らかの仮定やデータ範囲の制約条件を置けるならば、復号できる可能性があるかもしれませんが...
|
1
update
test
CHANGED
@@ -1 +1,7 @@
|
|
1
|
-
`fopen("hoge.dat", "w")`ではなく`fopen("hoge.dat", "wb");`とすべきです。
|
1
|
+
`fopen("hoge.dat", "w")`(テキストモード)ではなく`fopen("hoge.dat", "wb");`(バイナリモード)とすべきです。
|
2
|
+
|
3
|
+
|
4
|
+
|
5
|
+
Windows環境のテキストモードでは、LF(`\n`)/0x0A は CR+LF(`\r`+`\n`)/0x0D+0x0A という2バイトへと変換されてしまいます。バイナリデータを出力するときは、バイナリモードの指定は必須です。C言語プログラムとしての**致命的な**バグですから、原則としてC言語プログラム側を**修正すべき**です。
|
6
|
+
|
7
|
+
|