C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: integer型をbyte型に変換する方法


(過去ログ 142 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■83159 / inTopicNo.1)  integer型をbyte型に変換する方法
  
□投稿者/ 小僧 (1回)-(2017/03/09(Thu) 10:16:05)

分類:[.NET 全般] 

integer型をbyte型に変換したいのですが

Dim hhh As Integer = 500
Dim dd As Byte = CByte(hhh)

のようにするとオーバーフローして、エラーとなります。


予め、

If hhh > 255 Then

hhh = 255

ElseIf hhh < 0 Then

hhh = 0

End If

という操作を行う必要があるのは分かるのですが
これを自動でやってくれるコマンドがあれば
教えてください。






引用返信 編集キー/
■83160 / inTopicNo.2)  Re[1]: integer型をbyte型に変換する方法
□投稿者/ shu (974回)-(2017/03/09(Thu) 10:31:32)
No83159 (小僧 さん) に返信


> hhh = 255

> hhh = 0
これらは当たり前の動作ではありません。
仕様に合わせてコーディングをする必要があります。
複数箇所ある場合変換関数を作るとよいです。
引用返信 編集キー/
■83161 / inTopicNo.3)  Re[1]: integer型をbyte型に変換する方法
□投稿者/ 魔界の仮面弁士 (1174回)-(2017/03/09(Thu) 10:43:56)
2017/03/09(Thu) 10:44:43 編集(投稿者)

No83159 (小僧 さん) に返信
> integer型をbyte型に変換したいのですが
> Dim hhh As Integer = 500
> Dim dd As Byte = CByte(hhh)
> のようにするとオーバーフローして、エラーとなります。

そうとも限らないですよ。VB のコンパイルモードを変更すれば
オーバーフローチェックを省略することもできますし。
※ILレベルでは、0xb4(conv.ovf.u1)の代わりに 0xd2(conv.u1)が使われます。

ちなみにオーバーフローチェックを省略した場合、
上記の dd には 244 が代入されます。
500 は &H000001F4
244 は &H000000F4


> これを自動でやってくれるコマンドがあれば
> 教えてください。

私ならこう書きます。

Dim dd As Byte = CByte(Math.Max(0, Math.Min(hhh, 255)))
引用返信 編集キー/
■83162 / inTopicNo.4)  Re[2]: integer型をbyte型に変換する方法
□投稿者/ 小僧 (2回)-(2017/03/09(Thu) 11:20:41)
ご回答ありがとうございました。
参考にさせていただきます。
 
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -