VBA下面怎么编写函数实现将超长数字转化为IP地址?

silencsrv 2009-04-28 11:12:44
我这里有个超长数字:4294901760,需要将其转化为IP地址,具体做法是将这个十进制数字转化为16进制,然后从地位到高位两位一组转化为10进制,中间加上.号,就成为一个IP地址。但是在实现过程中遇到一个问题就是数字溢出,每次尝试把这个数字转化为二进制或者十六进制时总是报溢出错误,特别是使用CLng()、Mod、\这类转换函数或者运算符的时候。所以请教高手怎么解决,是否需要用VC编写DLL然后通过VB调用?

多谢。
...全文
155 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
嗷嗷叫的老马 2009-04-29
  • 打赏
  • 举报
回复
路过.

帮顶.
zhiyongtu 2009-04-29
  • 打赏
  • 举报
回复
楼上的方案我已收藏。
PctGL 2009-04-28
  • 打赏
  • 举报
回复
Option Explicit
Private Type DwordIPAddress
IPField1 As Byte
IPField2 As Byte
IPField3 As Byte
IPField4 As Byte
End Type
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)

Private Sub Command1_Click()
MsgBox IPAddressFromDword(Text1)
End Sub

Function IPAddressFromDword(ByVal Dword As Long) As String
Dim IPaddress As DwordIPAddress
CopyMemory IPaddress, Dword, 4
IPAddressFromDword = IPaddress.IPField1 & "." & IPaddress.IPField2 & "." & IPaddress.IPField3 & "." & IPaddress.IPField4
End Function
zhiyongtu 2009-04-28
  • 打赏
  • 举报
回复
Function IP(n)
Dim n16 As String, i As Integer, tmp As String
n16 = Dec2Hex(n)
tmp = ""
For i = 1 To 7 Step 2
tmp = tmp & Hex2Dec(Mid(n16, i, 2)) & "."
Next i
IP = Left(tmp, Len(tmp) - 1)
End Function
zhiyongtu 2009-04-28
  • 打赏
  • 举报
回复
用工程分析VBA函数库,很容易解决。

首先确保引用“atpvbaen.xls”。然后,在程序中直接用
N16 = Dec2Hex(4294901760)

n = 4294901760
n16 = Dec2Hex(n)

即可得到答案。

立即窗口运行结果如下:
debug.Print Dec2Hex(4294901760)
FFFF0000

2,462

社区成员

发帖
与我相关
我的任务
社区描述
VBA(Visual Basic for Applications)是Visual Basic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。
社区管理员
  • VBA
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧