卖逼视频免费看片|狼人就干网中文字慕|成人av影院导航|人妻少妇精品无码专区二区妖婧|亚洲丝袜视频玖玖|一区二区免费中文|日本高清无码一区|国产91无码小说|国产黄片子视频91sese日韩|免费高清无码成人网站入口

如何在VB中正確地進(jìn)行有符號(hào)數(shù)和無(wú)符號(hào)數(shù)的相互轉(zhuǎn)換

在軟件逆向算法過(guò)程中,常常會(huì)用到十六進(jìn)制的數(shù)值來(lái)賦值給變量。然而,在VB中,默認(rèn)數(shù)值為有符號(hào)型數(shù)據(jù),正數(shù)最大值為2147483647,若大于這個(gè)值的數(shù)則都被表示為負(fù)數(shù)。這導(dǎo)致了很多人因此放棄VB,改用

在軟件逆向算法過(guò)程中,常常會(huì)用到十六進(jìn)制的數(shù)值來(lái)賦值給變量。然而,在VB中,默認(rèn)數(shù)值為有符號(hào)型數(shù)據(jù),正數(shù)最大值為2147483647,若大于這個(gè)值的數(shù)則都被表示為負(fù)數(shù)。這導(dǎo)致了很多人因此放棄VB,改用其他語(yǔ)言。

但是,通過(guò)自制函數(shù)Unsigned()和Signed(),我們可以在VB中正確地進(jìn)行有符號(hào)數(shù)和無(wú)符號(hào)數(shù)的相互轉(zhuǎn)換。

一、自制函數(shù)源代碼

以下是函數(shù)Unsigned()的代碼,它接收參數(shù)hNum為十六進(jìn)制數(shù)。當(dāng)大于等于“amp;H80000000”的數(shù)都是負(fù)數(shù)時(shí),以“amp;H70000000”作為分界線,只要大于“amp;H70000000”就減“amp;H70000000”,然后相加即可。

Public Function Unsigned(hNum As String) As Double

Dim isDbl As Double, fNum As Byte

If InStr(hNum, "amp;H") Then hNum Replace(hNum, "amp;H", "")

If Len(hNum) lt; 8 Then

isDbl "amp;H" amp; hNum

Else

fNum "amp;H" amp; Left(hNum, 1)

Do

If fNum gt; 7 Then

fNum fNum - 7

isDbl isDbl amp; "amp;H70000000"

Else

isDbl isDbl amp; ("amp;H" amp; fNum amp; Right(hNum, 7))

Exit Do

End If

Loop

End If

Unsigned isDbl

End Function

以下是函數(shù)Signed()的代碼,它可以將大于2147483647的數(shù)全部減去4294967296(即:十六進(jìn)制“amp;H100000000”,一個(gè)1,八個(gè)0)。

Public Function Signed(ByVal hNum As Double) As Double

If hNum lt; 4294967296 And hNum gt; 2147483647 Then

hNum hNum - 4294967296

End If

Signed hNum

End Function

二、測(cè)試

下面是一個(gè)測(cè)試的例子:

Sub Test()

Dim Eax As Double, Ebx As Double, Ecx As Double

Ebx "amp;H87654321"

Eax Unsigned("87654321")

Ecx Signed(Eax)

Eax, Ebx, Ecx

End Sub

輸出結(jié)果為:

2271560481 -2023406815 -2023406815

可以看到,Eax和Ecx的值相同,均為-2023406815,正確地完成了有符號(hào)數(shù)和無(wú)符號(hào)數(shù)之間的轉(zhuǎn)換。

通過(guò)以上的自制函數(shù),我們可以在VB中更好地操作十六進(jìn)制數(shù)值,輕松地解決了有符號(hào)數(shù)和無(wú)符號(hào)數(shù)的相互轉(zhuǎn)換問(wèn)題。

標(biāo)簽: