DOBON.NET DOBON.NETプログラミング掲示板過去ログ

マイナス値のUInteger型変数への変換方法

環境/言語:[XP,VB2008]
分類:[.NET]

教えてください。

Dim i As Integer = -1052025
をUIntegerに変換するにはどうしたらよろしいでしょうか?

CUInt(i)ではオーバーフローしてしまいます。
手抜きするなら、ToString で一旦 16 進数文字列に変換して、その後 Convert.ToUInt32 で基数 16 で変換するとか。
まず &h7fffffff と And して先頭ビット落としてから CUint して、元が負数なら UInteger な &h80000000 と Or して先頭ビットを補うとか。
■No23636に返信(Hongliangさんの記事)
> 手抜きするなら、ToString で一旦 16 進数文字列に変換して、その後 Convert.ToUInt32 で基数 16 で変換するとか。
> まず &h7fffffff と And して先頭ビット落としてから CUint して、元が負数なら UInteger な &h80000000 と Or して先頭ビットを補うとか。

ありがとうございます。
結局以下のような関数にしました。
Public Function CUnsignedInt(ByVal i As Integer) As UInteger
If i < 0 Then
Dim li As Long = CLng(i)
Dim l As Long = CLng(li + INT_MAX + 1 + INT_MAX + 1)
Return CUInt(l)
Else
Return CUInt(i)
End If
End Function
多分よろしいと思うのですが。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板