2011-12-20 15 views
0

私は2つのファイルを1バイトずつ比較するプログラムをC++で作成しようとしています。1バイトあたりのファイルバイトからの読み込みC++

私は次のポスト

Reading binary istream byte by byte

この部分についてイム本当にわからないで見ていました。 get(char & c)を使用すると、charを読み込んでcに格納します。これは0x0Dと言うか、実際のchar値 "c"(または何でも)を格納していますか?

私はこのメソッドを使ってバイト単位で2つのファイルを比較したいのですが、両方でget(char & c)を使用して、得られた文字を比較するか、バイトにキャストする必要がありますか?

がメモリ内に、整数の

+0

を小数でき

char c = 0x63; c++; // c is now: 0x64 

注「この保存している、またはそれが保存されます実際のchar値 "c"(または何でも)? "それは同じことです。 –

+0

私はその質問を理解していません。 'char'値は実際にはいくつかのバイトです(そしてあなたは問題なくintにキャストできます)。いくつかの実装(コンパイラ+システム)は 'char 'が' unsigned'(例えば0から255)であり、他の実装(例えば-128から127 IIRCへ)されています。 –

+2

バイナリデータの使用が必要な場合はcharを使用しないでください。unsigned char。 – AlexTheo

答えて

2

char sが(表現を言い訳)「ストレージの特殊なタイプ」に過ぎません(私は、元はかなり古いものですので、良いだろう新しい投稿を開始考え出し) 'A'と十進値65(ASCIIと仮定)の間に違いはありません。

cは、言い換えれば、ファイルからの読み取りバイトを含みます。


あなたの質問にお答えします。いいえ、キャストする必要はありませんc1 == c2はうまくいくでしょう。上記で+c1を書く


char c1 = 'A', c2 = 97, c3 = 0x42; 

    std::cout << c1 << " " << c2 << " " << c3 << std::endl; 
    std::cout << +c1 << " " << +c2 << " " << +c3 << std::endl; 

/*それはだ、intc1をキャストします(int)c1または(C++っぽい)より正確static_cast<int> (c1)を書くことと同じことです。*/

出力:

A a B 
65 97 66 
0

EHM、charは1バイト その値の解釈確かにあなたに依存している、プログラマが含まれてい

このバイトをcoutストリームに出力すると、ASCIIコードで解釈され、charが0x63の場合は、画面に 'c'が表示されます。 0x0Dを言う、と

は、あなただけの値を使用している場合は、好きなようにあなたがそれを使用することができます..あなたも入力が

+0

ああ右。乾杯 – discodowney

関連する問題