0

関数 fgetc によってストリーム内で読み取られるビット数は?

fgetc のマニュアルページには、この関数が「文字」を読み取ると書かれていますが、文字は私にとって明確な定義ではありません。「文字」は何ビット含まれていますか? fgetc で文字を読み取ることは、バイトを読み取ることと同じですか?

マシンのアーキテクチャと「char」または「byte」のサイズに依存しますか?

私の目的は、移植性のあるストリーム (バイト = 8 ビットまたはバイト = 16 ビット) でバイナリ データを読み取ることです。ストリームで読み取られるビット数を制御するために、fgetc の代わりに uintN_t のような型で fread/fwrite を使用することをお勧めしますか? より良い解決策はありますか?

4

3 に答える 3

2

「文字」は何ビット含まれていますか?

文字にはCHAR_BIT、で定義された実装固有の値であるビットが正確に含まれlimits.hます。

/* Number of bits in a `char'.  */
#  define CHAR_BIT      8

バイトを読み取るのと同等のfgetcで文字を読み取っています

うん、fgetc正確に1バイトを読み取ります。

この移植性の問題は簡単には解決できません。それを回避する最善の方法は、バイナリ表現を想定しないことです。

于 2012-07-27T13:26:40.323 に答える
1

fgetc正確に 1バイトを読み取ります。文字型 ( signed charcharunsigned charおよび修飾バージョン) には、 より大きい定数であるCHAR_BITビット ( ) が含まれています。<limits.h>8

于 2012-07-27T13:51:29.393 に答える
0

プラットフォームには、C データ型に対応するデータの最小単位がありますchar。すべての I/O はchars 単位で発生します。char は 0 ~ 127 の値と、0 ~ 255 または -127 ~ 127 のいずれかの値を保持できることが保証されています。それ以外はすべてプラットフォーム固有です。( a 内の実際のビット数はchar、マクロに含まれていCHAR_BITます。)

とはいえ、宣伝されている範囲内の値のみを各文字に読み書きする限り、プログラムは適合するプラットフォームで動作することが保証されます。保証されていない唯一のことは、結果のデータ ストリームがバイナリ的に同一になることです。

于 2012-07-27T13:28:20.207 に答える