VB自定义函数:有符号数和无符号数的相互转换

 时间:2024-10-15 09:58:15

1、一、自制函数源代码在网上也找不到解决办法,怎么办?难道我也要放弃VB吗?不!决不!经过苦思冥想,终于鲽判砦吟制作出了用于解决的函数Unsigned()。'有符号转无符号Public Function unSigned(hNum As String) As Double Dim isDbl As Double, fNum As Byte If InStr(hNum, "&H") Then hNum = Replace(hNum, "&H", "") If Len(hNum) <> 8 Then isDbl = "&H" & hNum Else fNum = "&H" & Left(hNum, 1) Do If fNum > 7 Then fNum = fNum - 7 isDbl = isDbl + "&H70000000" Else isDbl = isDbl + ("&H" & fNum & Right(hNum, 7)) Exit Do End If Loop End If unSigned = isDblEnd Function

2、二、原理说明函数Unsigned()接收参数hNum为十六进制数,即然大于等于“&H80000000”的数都是负数,那么我就以“&H70000000”作为一个分界线,只要大于“&H70000000”就减“&H70000000”,然后相加,举例如下:Sub Test_wanao() Dim Eax As Double Eax = unSigned("&H87654321")End Sub函数Unsigned()的工作原理就是:“&H70000000”+"&H17654321"。

3、三、反向转换其实,有些时候,也会需要“无符号转有符号”,所以,我就又制作出了下面这个“无符号转有符号”函数:Public Function Signed(ByValhNum As Double) As Double If hNum < 4294967296# And hNum > 2147483647 Then hNum = hNum - 4294967296# End If Signed = hNumEnd Function这个函数的原理很简单,大于2147483647(即:十六进制“&H7FFFFFFF”)的数全部减4294967296(即:十六进制“&H100000000”,一个1,八个0)。

4、四、测试Sub Test_wanao() Dim Eax As Double, Ebx As Double, Ecx As Double Eax = unSigned("87654321") Ebx = "&H87654321" Ecx = Signed(Eax) StopEnd Sub大家猜一下,Eax、Ebx、Ecx各是多少?首先Ebx为VB默认的有符号型,所以Ebx =-2023406815Eax为无符号型,Eax =2271560481Ecx为有符号型,Ecx=-2023406815

  • 金脉单药花的养殖方法是什么?
  • 龙血树怎么浇水?
  • 鸽子山药养生汤
  • 包心菜爆炒鸡肉的简单家庭版
  • 童子鸡的做法大全
  • 热门搜索
    父亲节手抄报图片 科技手抄报内容大全 传统文化手抄报图片 全国爱眼日手抄报 历史手抄报图片 普通话手抄报简单 节俭手抄报 抗病毒手抄报 做一个有道德的人手抄报 母亲节手抄报简单好画