fwriteは移植可能ですか?以下に説明する問題に実際に直面しているわけではありませんが、Cの基本を理解したいと思います。
2台のマシンA8(バイト= 8ビット)とB16(バイト= 16ビット)があると仮定しないでください。
次のコードは、両方のマシンで同じ出力を生成しますか?
unsigned char[10] chars;
...
fwrite(chars,sizeof(unsigned char),10,mystream);
A8は80ビット(10オクテット)を生成し、B16は160ビット(20オクテット)を生成すると思います。私が間違っている?
ビット単位の長さはバイトのサイズに依存しないため、uintN_tタイプのみが使用された場合、この問題は発生しません。しかし、おそらくuint8_tはB16には存在しません。
この問題の解決策は何ですか?
uint32_tの配列を作成し、この配列にバイトを入れて(マシンのアーキテクチャに応じてスマートシフトとマスクを使用して)、この配列を作成することで問題が解決すると思います。しかし、これは実際には満足のいくものではありません。uint32_tがすべてのプラットフォームに存在するという仮定があります。この配列の充填は、現在のマシンのアーキテクチャに大きく依存します。
ご回答ありがとうございます。