- - PR -
C#でC言語風の複数文字リテラル(例: 'ABCD')を使用する方法
1
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-01-24 18:51
VS2005Pro C# でスタンドアローンアプリを作っています。
C言語で文字リテラルに複数の文字を入れることができますね。 (例: 'ABCD')※複数文字リテラルというのは僕の造語です(^_^; C#では文字リテラルはUNICODEなのでそういうことは当然できないのですが、 過去のC資産でこれをやっているところがあり、 なんとかならないものかと思ったのですが、 何てググったらいいか分からず困っています。 最終的にInt32に数値として入れたいのですが、 可読性も考えて'ABCD'の直値を入れるということは避けたいと思います。 byte型とシフト演算で何とかすれば実現できそうですが、 既に方法が分かる方がいらっしゃいましたら教えていただけませんでしょうか? やはり、"ABCD"(ダブルクォーテーション)で指定して、 byte型に取り出して、シフトとマスクでInt32に入れるという手順でしょうか。 頻繁に呼ばれる(最大0.1秒毎)ので、 どうしても負荷を抑えられない場合は別の方法を取らざるを得ません。 なにか方法はないでしょうか? | ||||||||||||||||
|
投稿日時: 2008-01-24 19:48
string は配列のように各文字(Char 型)にアクセスできますから、それをビット演算が手っ取り早いでしょう。
パフォーマンスに関しては、いまどきの PC ならどんな書き方したってマイクロ秒にもならない程度ですよ。 static readonly にして初期化時に int に変換しておいてもいいですけど。 | ||||||||||||||||
|
投稿日時: 2008-01-24 20:50
Hongliangさん、
ありがとうございます。
そういえば、そういうことができましたね! すごく、プレーンに書くとこういうことになりますね。
その案は、設定ファイルをコンストラクタで読み込める場合ならありですね。 コード上に直値で書きたい場合はあまり意味ないですね。 (今回はこっちです)
と書くのと同じことですから。。。 上記のプレーンな実装より早い方法があれば知りたいです! 件名からは外れますが、 コレと、文字列の比較に仕様変更するのとどっちが、 速度・保守性の面から上でしょうか? もしくは、実は、これはイベントIDのようなものなのですが、 C#で標準的な方法ってありますか? 動的なシステムなので、定数を使いたくはないのです。 | ||||||||||||||||
|
投稿日時: 2008-01-25 01:56
byte配列ならBitConverter.ToInt32とか。 stringからbyte[]への取り出しならforループで書けますし、もうちょっとすっきりするのでは。
コード上で書いた文字列リテラルも十分定数に見えます。 [ メッセージ編集済み 編集者: Azulean 編集日時 2008-01-25 01:57 ] | ||||||||||||||||
|
投稿日時: 2008-01-25 09:23
Azuleanさん、ありがとうございます。
BitConverter.ToInt32 貴重な情報ありがとうございます。 .NET歴が浅い僕にはぴったりの回答でした。 パフォーマンス検証の対象に入れさせていただきます。
それもパフォーマンス検証に入れさせていただきます。 # 書き忘れていましたが、必ずASCI4文字です。
本来、良くないのかも知れないです。 ただ、今回はプラグインベースのシステムで、 定数を共通の場所に定義できないので、 数値が重なっても気付きづらいということです。 各プラグイン内で定数定義するのは自由ですが、 それでも、無味乾燥な数値よりもASCI4文字のほうが間違いが少ない かと思いました。 # もともとのCのシステムもそういう理由で複数文字リテラル(造語)を # 使っていたのだと思います。 |
1