0

私は問題を抱えていcin.get()ます:

charを取得しているときに、intに変換していますが、コンソールから入力すると、コードで既に設定されている場合とは結果が異なります。

次に例を示します。

int ord(unsigned char chr){
    int ret=int(chr);
    return ret;
}
int main(){
    unsigned char chr='ň'; //This is my constant character 'ň' for now
    cout<<ord(chr)<<endl; //outputs : 242 ,which is alright for me, because it is same as in PHP and that I need
    chr=cin.get(); //now I change my constant character 'ň' to 'ň' written through console 
    cout<<ord(chr)<<endl; //outpus : 229 ,which is wrong for me, because its not same as in PHP 
}

どうすればこれを修正できますか?

229ではなく242を取得したいのですが、PHPでのord()の結果と同じである必要があります。

4

3 に答える 3

1

問題は、コンソールがコード ページ 852 から文字を読み取っていることです。コードポイントň229 (0xE5) でエンコードされていますが、コード ポイント 242 でエンコードされているISO 8859-2 (別名 Latin-2) の値が必要です。 ň(0xF2)。

このアプローチを放棄し、これらの問題のない Unicode のみを使用することを強くお勧めします。ISO 8859 バリアントや DOS コード ページなどの非 Unicode エンコーディングを扱うことは、頭の痛い問題です。

Unicode データを使用するには、この質問を参照してください。Unicode では、ňコード ポイントは U+0148 です。

また、これは問題には関係ありませんが、ord()機能は役に立ちません。 cin.get()は既に を返し、int暗黙unsigned char的に にキャストできますint

于 2012-07-26T19:37:41.680 に答える
1

ソース ファイルとコンソール入力は、2 つの異なるプロセスを経て文字を解釈し、コードに変換します。1 つ目はテキスト エディターに入力され、コンパイラによって変換されます。2 つ目は、OS とコンソール ライブラリによって解釈されます。

値 242 は、ISO/IEC 8859-2またはWindows 1250コード ページの文字に対応します。

値 229 がどこから来たのかはわかりませんが、文字に値を割り当てるために別のコード ページが使用されているためであることはほぼ間違いありません。たとえば、おそらくコードページ852です。

于 2012-07-26T19:36:24.320 に答える
0

問題は、文字ňが ASCII 文字ではないため、ASCII コードがないことです。

PHPord()と C++はどちらもord()、ASCII 以外の文字を指定すると、未定義の結果を約束します。

于 2012-07-26T19:40:13.190 に答える