3

C文字配列への文字の保存について質問があります。

ファイルから「char」型の配列にテキストを読み取る必要があります(unsigned charは使用できません)。127を超える値を持つ特定の文字(たとえば、€、ä、ö、...)がある場合、それらは負の値として保存されますが、多くの場合、より多くのスペースを必要とします(たとえば、€は3つの負の値を取ります)。

これらの負の値を計算して符号なし文字に戻すにはどうすればよいですか。誰かが私をその問題に関するチュートリアルまたはガイドにリンクできますか?

4

3 に答える 3

11

これを読むべきだと思います: http://www.joelonsoftware.com/articles/Unicode.html

于 2012-12-18T13:22:19.327 に答える
1

これは、使用するエンコーディングによって異なります。

従来の 1 バイト エンコーディングでは問題ありません。はい、一部の文字は負の値として扱われますが、読み取り時の文字のままです。そのまま書き戻せば、元通りになります。

ユーロ記号ごとに 3 があると確信しているのでchar、UTF-8 などの Unicode エンコーディングを扱っています。

つまり、 のようなマルチバイト型に格納する必要がありますwchar_t。しかし、これはデータを に格納するという要件と矛盾しますchar

最初にファイルを 1 バイトのエンコーディング (たとえばWin1252 ) に変換することをお勧めします。このエンコーディングには、ユーロ記号用の 1 バイトがあります。

Unicode を使用する場合、残念ながら、負の値を処理するのは困難ですchar。正の整数で Unicode 値を表すのが伝統的です。

于 2012-12-18T13:28:46.477 に答える
-1
char x = 128;

unsigned char y = (unsigned char) x;

printf("%c %u\n", x, y);
于 2012-12-18T13:24:27.513 に答える