2016-09-09 8 views
0

私は実際にUnicodeを理解するためにPythonドキュメントのUnicode HOWTOを読んでいます。 Encodings Paragraphには、「Python」文字列の32ビット整数配列表現が表示されます。"Python"文字列の32ビットエンコーディングを理解できません

各チャーが何百もの非常に多くのものを持っている理由は分かりません。同様に、char "P"は0x50で表されます(これは、ASCII序数80の16進数に相当します)。しかしそれから3つの00のカップルが続きます。それは何ですか?この表現をどのように読むべきですか?

答えて

2

32ビットの整数配列は、32ビットの整数で構成されています。

バイトは8ビットなので、各文字は必ず4バイトで構成されます。

数値は0x00000050で、4バイトに変換されます。 0x50 0x00 0x00 0x00(最後に最上位の数字を表すバイト - 「リトルエンディアン」)または0x00 0x00 0x00 0x50(最後に最下位の「ビッグエンディアン」)を注文することができます。リンク先の段落に記載されているように、CPUごとに注文の選択肢が異なります。

これは実際的ではないと思う場合は、その段落でなぜそれが説明されているのか、また別のエンコーディングが一般的に好まれる理由を説明しようとしています。

その記事で始めるのではなく、The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)はそのタイトルにかなりうまく対応しています。

+0

ありがとうございます。実際には意味があります。あなたが提供してくれた素敵なリンクのために私はあなたの答えを選びます。今私はそれを読まない言い訳がありません:D – collederas

+0

小さなエンディアンと大きなエンディアンが混在しています。最後のバイトはリトルエンディアンで、その逆もあります。 – nwellnhof

+0

@nwellnhof:私はあなたが正しいと思う、私はニーモニックが働いたと思った... – RemcoGerlich

1

これらの文字のすべてがASCIIセットに含まれている、つまり1バイト(16進表記で2文字)を占めるため、ゼロが非常に多い理由があります。 Unicodeのエンコーディングは、そのようなASCIIと互換性があります。

残りは残りの3バイトのフィラーです。

それは一種の(符号なし)int32にコピー、その後、(符号なし)byteであることを宣言した元の変数を取るようなものです - それは大きなタイプですので、あなたが、後者ではゼロの多くを得るだろう。

関連する問題