質問

正確に:文字列の長さはバイトサイズと同じですか?言語で重要ですか?

それはそうだと思いますが、確認したいだけです。

追加情報:私は一般的に疑問に思っています。私の特定の状況は、MySQLを使用したPHPでした。

答えは「いいえ」ですので、知っておく必要があるのはそれだけです。

役に立ちましたか?

解決

いいえ。ゼロで終了する文字列には、余分なバイトが1つあります。パスカル文字列(Delphiの短い文字列)には、長さのための余分なバイトがあります。また、Unicode文字列には文字ごとに複数のバイトがあります。

ユニコードでは、エンコードに依存します。文字ごとに2バイトまたは4バイト、または1,2と4バイトを混在させることもできます。

他のヒント

完全にプラットフォームと表現に依存します。

たとえば、.NETでは、文字列はUTF-16コードポイントごとに2バイトのメモリ内を取ります。ただし、サロゲートペアでは、U + 100000からU + 10FFFFの範囲の完全なUnicode文字に対して2つのUTF-16値が必要です。メモリ内の形式には、文字列の長さおよび場合によってはパディングのオーバーヘッド、およびタイプポインターなどの通常のオブジェクトオーバーヘッドもあります。

今、.NETからディスク(またはネットワークなど)に文字列を書き込むとき、エンコードを指定します(ほとんどのクラスはデフォルトでUTF-8です)。その時点で、サイズはエンコードに大きく依存します。 ASCIIは常に文字ごとに1バイトを使用しますが、非常に制限されています(アクセント記号なしなど)。 UTF-8は、可変エンコーディングですべてのUnicode範囲を提供します(すべてのASCII文字は1バイトで表されますが、他の文字はそれ以上を使用します)。 UTF-32は、Unicode文字に対して常に正確に4バイトを使用します-リストは続きます。

ご覧のとおり、単純なトピックではありません。文字列がどれだけのスペースを占有するかを計算するには、状況が何であるかを指定する必要があります-あるプラットフォームのメモリ内のオブジェクトであるかどうか(もしそうなら、どのプラットフォーム-潜在的に実装やオペレーティングシステムの設定まで)、またはテキストファイルなどの未加工のエンコード形式であるかどうか、およびその場合はどのエンコードを使用するか。

「長さ」の意味によって異なります。 「文字数」を意味する場合その後、いや、多くの言語/エンコード方法は文字ごとに複数バイトを使用します。

常にではなく、エンコーディングに依存します。

単一の答えはありません。言語およびの実装に依存します(いくつかの言語は複数の実装を持っていることに注意してください!)

ゼロ終了ASCII文字列は、「コンテンツ」よりも1バイト多く少なくとも占有します。文字列の。 (文字列の作成方法に応じて、さらに割り当てられる場合があります。)

非ゼロで終了する文字列は、記述子(または同様の構造)を使用して長さを記録します。これは、余分なメモリどこかを必要とします。

Unicode文字列(さまざまな言語)では、1文字につき2バイトを使用します。

オブジェクトストア内の文字列は、ハンドルを介して参照できます。これにより、メモリ管理を簡素化するために、インダイレクション(およびより多くのデータ)のレイヤーが追加されます。

あなたは正しいです。 ASCIIとしてエンコードする場合、文字ごとに1バイトがあります。それ以外の場合は、文字ごとに1バイト以上です。

特に、これが部分文字列操作に与える影響を知ることが重要です。文字ごとに1バイトがない場合、s [n]はn番目のバイトまたはn番目の文字を取得しますか? n番目の文字を取得することは、1文字につき1バイトであるため、定数ではなく大きなnに対して非効率になります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top