トップ回答者
chr関数のコードの範囲

質問
回答
-
# TH01さんの指摘も踏まえつつ…。
Chr(128)としてどのような値を期待しているのでしょうか? Chr関数のドキュメントによると
Chr は、System.Text 名前空間の Encoding クラスを使って、現在のスレッドが 1 バイト文字セット (SBCS) と 2 バイト文字セット (DBCS) のどちらを使用するのかを判断します。 それに基づいて、CharCode を適切なセットのコード ポイントとして受け取ります。 SBCS 文字の範囲は 0 ~ 255 で、DBCS 文字の範囲は -32768 ~ 65535 です。
とまぁ、ややこしいことが書かれていますが要約すると実行時のスレッド、ひいては実行に使用しているOS言語などによって返される値が異なります。日本語なら日本語としての128(128~256の中には半角カタカナも含まれますね)、フランス語ならフランス語の128といったように、それぞれ異なります。
それに対してTH01さんの提示されているChrW関数はUnicodeを扱うため、言語に依存しません。つまりコンパイル時に確定でき定数として扱えます。
そこで元の質問に戻りますが、MMU_takaさんとしてはChr(128)としてどのような値を期待してそのコードを記述したのでしょうか? それによって解決策が変わってきます。
-
コンパイルの際、Chr(127) は結果値に変換されますが、Chr(128) の方はメソッド呼び出しのまま残るようです。なので次のように定数が必要な個所ではコンパイルエラーになります。
(当方は Visual Studio 2008 の環境で確認)Private Const 定数1 As Char = Chr(127) '→ 結果値に変換される
Private Const 定数2 As Char = Chr(128) '→ Microsoft.VisualBasic.Strings.Chr(&H80) のまま定数で利用する場合は ChrW(128) と書けば良いみたいです。
Private Const 定数1 As Char = ChrW(127)
Private Const 定数2 As Char = ChrW(128)
すべての返信
-
コンパイルの際、Chr(127) は結果値に変換されますが、Chr(128) の方はメソッド呼び出しのまま残るようです。なので次のように定数が必要な個所ではコンパイルエラーになります。
(当方は Visual Studio 2008 の環境で確認)Private Const 定数1 As Char = Chr(127) '→ 結果値に変換される
Private Const 定数2 As Char = Chr(128) '→ Microsoft.VisualBasic.Strings.Chr(&H80) のまま定数で利用する場合は ChrW(128) と書けば良いみたいです。
Private Const 定数1 As Char = ChrW(127)
Private Const 定数2 As Char = ChrW(128)
-
# TH01さんの指摘も踏まえつつ…。
Chr(128)としてどのような値を期待しているのでしょうか? Chr関数のドキュメントによると
Chr は、System.Text 名前空間の Encoding クラスを使って、現在のスレッドが 1 バイト文字セット (SBCS) と 2 バイト文字セット (DBCS) のどちらを使用するのかを判断します。 それに基づいて、CharCode を適切なセットのコード ポイントとして受け取ります。 SBCS 文字の範囲は 0 ~ 255 で、DBCS 文字の範囲は -32768 ~ 65535 です。
とまぁ、ややこしいことが書かれていますが要約すると実行時のスレッド、ひいては実行に使用しているOS言語などによって返される値が異なります。日本語なら日本語としての128(128~256の中には半角カタカナも含まれますね)、フランス語ならフランス語の128といったように、それぞれ異なります。
それに対してTH01さんの提示されているChrW関数はUnicodeを扱うため、言語に依存しません。つまりコンパイル時に確定でき定数として扱えます。
そこで元の質問に戻りますが、MMU_takaさんとしてはChr(128)としてどのような値を期待してそのコードを記述したのでしょうか? それによって解決策が変わってきます。