2005年09月26日

キャストとオーバーフロー

今回はちょっとVB.NETの不満点の一つを。まあここでC#のコードを移植する以外直接書くことはないから大した問題ではないんですけど。

21日の記事だったと思いますが、そのときVB.NETにC#のコードを移植していて気付いたんですが、VB.NETはキャストする際Cなんとか関数(以下、型変換関数)を使用するんですよね(ところでこれはコンパイル時に解決されるから関数と言うよりはマクロかステートメントとでも呼ぶべきかも知れません)。IntegerにキャストするならCInt、2005から追加された符号無し系でもUIntegerにキャストするのにCUInt。

ま、それは構いません。(byte)4とやろうがCByte(4)とやろうが結果が同じなら。

問題は、結果が違いうると言うことです。具体的に言えば、型変換関数にはオーバーフローチェックが入っちゃうんですよね。しかもそれを無視して(型落ちを容認して)強制的にキャストする手段がなかなかない。

状況を限定すればまあ計算で求まるんですからそれでいいかもしれませんけど、ロジックを考える手間も(手間と言うほどではありませんが)考えれば、もうちょっと汎用的な手段がないものか。Convert.To関係のもオーバーフローチェックしちゃうんですよねぇ。オーバーフローチェックしないオーバーロードがあっても良いと思うんだけどなぁ。この部分はエンディアンには影響されないというか関係ないだろうし。

取りあえず思いついた手段をまあ9/21の記事で使ったんですが、論理和で必要桁だけマスクしてから、一旦ToString("X")を使って16進数の文字列にし、それをConvert.ToHogehoge(String, Integer)で必要な型に変換するというもの。途中で16進(または2進)を挟めば何故かオーバーフローチェックしなくなるんですよね。これで&H80008355なんてのがShortにもIntegerにもマイナス値に変換できるようになります。

がしかし、まあなんというか美しくない。なにかもっと良い手段はないもんですかね。どなたかVBに詳しい方いらっしゃいません?

posted by Hongliang at 04:34| Comment(47) | TrackBack(0) | VB.NET | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
http://www.shop-rmt.jp/gamebuy/Arad.htm】が提供する通貨信用販売サービス。
Posted by rmt at 2011年07月16日 13:56
いつも御世話になっております。【http://www.rmt-iti.com/gamebuy/Dragon%20Nest.htm】でございます。
Posted by アラド rmt at 2011年07月16日 16:09
スタッフと一緒にお客様のご来店を期待しております
Posted by くろネコ RMT at 2011年07月16日 23:44
いつも御世話になっております。【http://www.rmt-iroiro.jp/rmtbuy/REDSTONE.htm】でございます。
Posted by アスタリア RMT at 2011年07月17日 00:36
今【FF14】を最安値で販売しています。
Posted by Arad rmt at 2011年07月17日 16:29
今の在庫はいっぱいあります。そして、価格は値下がりました
Posted by アラド戦記 rmt at 2011年07月17日 16:30
http://www.rmt-iroiro.jp/rmtbuy/REDSTONE.htm】経営方針: 信用第一、迅速対応、安全取引!RMT未経験方、小口方でも大歓迎です!
Posted by アトランティカ rmt at 2011年07月17日 21:58
今の在庫はいっぱいあります。そして、価格は値下がりました
Posted by メイプルストーリー rmt at 2011年07月17日 22:47
http://www.kiraku-rmt.jp/rmtbuy/REDSTONE.htm】が提供する通貨信用販売サービス。
Posted by ドラゴンネスト rmt at 2011年07月18日 00:03
こんにちはいつも【http://www.sale-rmt.jp/gamebuy/FF14.htm】ご愛顧本当にありがとうございます!
Posted by アスタリア RMT at 2011年07月18日 00:35
http://www.info-rmt.com/informt/Dragon%20Nest.htm】が提供する各種サービスにおいて、スマートピットを利用したコンビニ支払いが可能になりました。
Posted by Maple Story rmt at 2011年07月18日 06:47
http://www.rmt-mab.com/gamebuy/Atlantica.htm】お取引方法などの詳細は、トップページ、またはこちらに記載されております。
Posted by rmt at 2011年07月18日 07:24
是非この機会に当サイト委託販売をご利用ください。委託販売商品リストは下記URLからどうぞ。
Posted by RF rmt at 2011年07月18日 08:40
仕事の都合で通貨を稼ぐ時間が無いし、通貨不足と感じなお悩みのお客様いらっしゃいましたら、ウェブRMTが解消させていただきます!
Posted by Dofus rmt at 2011年07月18日 09:49
今から【FF14 RMT】の通貨が入荷しました。お客様はぜひご利用してください
Posted by アスタリア RMT at 2011年07月18日 09:58
いつも御世話になっております。【http://www.sale-rmt.jp/】でございます。
Posted by nexon ポイント RMT at 2011年07月18日 14:53
いつも【http://www.rmt-iti.com/】をご愛顧いただき、ありがとうございます!
Posted by Dekaron rmt at 2011年07月19日 01:04
http://www.rmt-top.com/rmtbuy/Ragnarok.htm】は業内で最大で最安値綜合サイトです。会社の全員は一番サービスを提供していただきます。
Posted by R2 rmt at 2011年07月19日 05:16
より皆様にご利用いただけるように、多彩な決済が可能になりました。
Posted by アスタリア RMT at 2011年07月19日 05:41
今の在庫はいっぱいあります。そして、価格は値下がりました
Posted by アスタリア RMT at 2011年07月19日 07:08
http://yahoo-rmt.jp/yahoormt/FF11.htm】が提供する通貨信用販売サービス。
Posted by ラテール rmt at 2011年07月19日 08:13
http://www.rmt-iti.com/gamebuy/AION.htm】が提供する各種サービスにおいて、スマートピットを利用したコンビニ支払いが可能になりました。
Posted by アラド rmt at 2011年07月19日 12:27
http://www.sale-rmt.jp/gamebuy/TERA.htm】が提供する各種サービスにおいて、スマートピットを利用したコンビニ支払いが可能になりました。
Posted by メイプル rmt at 2011年07月19日 13:43
いつもお世話になります【http://www.rmt-iroiro.jp/rmtbuy/Latale.htm】です
Posted by ネクソンポイント RMT at 2011年07月19日 14:09
迅速と丁寧な対応!安全な取引!こちらへ【http://www.rmt-top.com/rmtbuy/Atlantica.htm
Posted by マビノギ rmt at 2011年07月19日 16:00
お世話になります、【http://www.shop-rmt.jp/gamebuy/RED%20STONE.htm】でございます。
Posted by メイプルストーリー rmt at 2011年07月19日 16:31
今【FF14】を最安値で販売しています。
Posted by rmt at 2011年07月19日 17:34
こんにちはいつも【http://www.info-rmt.com/informt/Aika.htm】ご愛顧本当にありがとうございます!
Posted by リネージュ2 rmt at 2011年07月20日 01:05
より皆様にご利用いただけるように、多彩な決済が可能になりました。
Posted by FFXI rmt at 2011年07月20日 06:09
http://www.info-rmt.com/】より便利になったサービスを、是非一度お試しください。
Posted by デカロン rmt at 2011年07月20日 06:45
弊社【http://www.rmt-link.jp/games/CABAL.htm】が扱う全てのゲームの委託販売商品をウェブマネーにてご購入いただけるキャンペーンを実施しております。
Posted by デカロン rmt at 2011年07月20日 08:31
今の在庫はいっぱいあります。そして、価格は値下がりました
Posted by メイプル rmt at 2011年07月20日 21:09
迅速と丁寧な対応!安全な取引!こちらへ【http://yahoo-rmt.jp/
Posted by RF rmt at 2011年07月21日 06:15
RMTが初めて!と言うお客様は小口数でも構いませんので、安心を実感して下さい!
Posted by FFXI rmt at 2011年07月21日 12:16
http://www.rmt-roan.jp/gamebuy/Maplestory.htm】は業内で最大で最安値綜合サイトです。会社の全員は一番サービスを提供していただきます。
Posted by FNO RMT at 2011年07月21日 12:20
FF14 RMT注文ページ:【http://www.rmt-mab.com/gamebuy/Atlantica.htm
Posted by メイプルストーリー rmt at 2011年07月21日 12:27
 RMT販売ページ:【http://www.rmt-iti.com/gamebuy/Latale.htm
Posted by 聖境伝説 RMT at 2011年07月21日 13:46
詐欺に遭わない安心のエスクローサービス、是非この機会にWebMoneyでご利用下さい。
Posted by メイプル rmt at 2011年07月21日 17:40
http://www.rmt-iti.com/gamebuy/Dragon%20Nest.htm】が提供する各種サービスにおいて、スマートピットを利用したコンビニ支払いが可能になりました。
Posted by 聖境伝説 RMT at 2011年07月22日 00:21
スタッフと一同にご利用を心より期待しております!【http://yahoo-rmt.jp/
Posted by アイオン rmt at 2011年07月22日 10:06
いつもお世話になります【http://www.rmt-iroiro.jp/rmtbuy/REDSTONE.htm】です
Posted by RF rmt at 2011年07月22日 10:30
http://www.shop-rmt.jp/gamebuy/RED%20STONE.htm】24時間注文受付、夜間、祝日でも迅速対応できる!
Posted by FFXI rmt at 2011年07月22日 10:47
http://www.rmt-iroiro.jp/rmtbuy/REDSTONE.htm】より便利になったサービスを、是非一度お試しください。
Posted by ASTARIA RMT at 2011年07月22日 11:45
スタッフと一緒にお客様のご来店を期待しております
Posted by rmt at 2011年07月22日 23:48
平素は【http://www.info-rmt.com/】をご利用いただき、誠にありがとうございます。
Posted by ラテール rmt at 2011年07月23日 00:51
FF14 RMT注文ページ:【http://yahoo-rmt.jp/yahoormt/Atlantica.htm
Posted by Dekaron rmt at 2011年07月24日 16:10
コメント欄、めっちゃ荒らされています..
Posted by かずき! at 2011年12月10日 22:43
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/7322277

この記事へのトラックバック

ここ(hongliang.seesaa.net)で公開しているものについて、利用は自由に行って頂いて構いません。改変、再頒布もお好きになさって下さい。利用に対しこちらが何かを要求することはありません。

ただし、公開するものを使用、または参考したことによって何らかの損害等が生じた場合でも、私はいかなる責任も負いません。

あ、こんなのに使ったってコメントを頂ければ嬉しいです。

×

この広告は1年以上新しい記事の投稿がないブログに表示されております。