1

ユニコード文字があるとしますwchar_t x;

もちろん、xASCIIに変換する明白な方法は、 wctob関数を使用することです。

しかし、Unicode の最初の 255 文字は ASCIIに対応するため、キャストはcharプラットフォーム間で一貫して機能するのでしょうか?

char c = (char) x ; // cast to char, this works on Windows

問題は、キャストがcharLOW ORDER ビットを保持することを保証するのか、それとも HIGH ORDER ビットを保持する可能性があるのか​​ということです。(ここでリトル エンディアン/ビッグ エンディアンの状況が懸念されますが、私のリトル エンディアン システムで機能した場合は、ビッグ エンディアン システムでも確実に機能するはずです)。

4

3 に答える 3

4

簡潔にするために、いくつかの用語を大まかに使用しています。多くの混乱を避けるために、少なくとも次の用語の定義を注意深く調べることを強くお勧めします: ASCII、Unicode、UCS、UCS-2、UCS-4、UTF、UTF-8、UTF-16、UTF-32、文字、文字セット、コード化文字セット、レパートリー、コード単位

文字「Q」のコードは、ASCII と Unicode の両方で 81 です。

81 は、他の整数と同様に単なる整数です。char変数は数値 81 を格納する場合があります。wchar_t変数は同じ数値 81 を格納する場合があります。どちらの場合も 81 は「Q」として解釈されます。

longegからにキャストしたときに 81 がどのように保存されるかを尋ねるのはあまり意味がありませんshort。一致する場合は、すべて設定されています。エンディアン、上位ビット、下位ビット、または関連するこれらのものはありません。

文字を格納するファイル、またはネットワークを介したバイト ストリームを変換する場合、古い数値 (のバイナリ表現) を格納するファイルと同様に、エンディアンとビットなどが重要になります。

于 2012-12-26T05:40:38.747 に答える
0

この状況では、システムのエンディアンは問題にならないという印象を受けました。

ここで本当に良い説明を見つけました。これは、キャスティングに対する不安を和らげるのに役立つと思います。

于 2012-12-26T05:20:52.580 に答える