テキスト表現が 0 から 255 の範囲にある「文字」を表すと想定されているのに、デフォルトで char が -128 から 127 の範囲にあるのはなぜですか? この意味で、デフォルトでは char は unsigned であるべきだと思いますが、それを「数字」のようにのみ扱うことを意図している場合に限り、「signed」キーワードを追加する必要があります。したがって、テキスト ファイルを操作するときは unsigned char を使用する必要がありますか?
また、バイナリ ファイルを操作する必要がある場合ではなく、なぜstd::ofstream
の読み取り関数と書き込み関数が使用されるのかわかりません。そこでは、署名されているかどうかは気にしませんよね?さらに、次のように使用して JPEG ファイルのコピーを正常に作成しました。char
unsigned char
signed char
//..open all streams..
char c;
while(input.peek()!=EOF){
input.read(&c,1); //std::ifstream input;
output.write(&c,1); //std::ofstream output;
}
//..close all streams..
それが機能するので、 は s をread
読み取りunsigned byte
(画像処理では anunsigned char
が一般的に使用されます) c
、値が 2 の補数で偶発的な符号付き解釈を持つように設定すると思います。値のヒストグラムを作成する必要がありますが、signed char をインデックスとして使用しているため、実行時エラーが発生します。uc = (unsigned char)c;?
unsigned char の読み取り/書き込みの単純なオーバーロードが少なくとも存在する可能性がある場合に、キャストを使用する必要があるのはかなり愚かではありませんか?