Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

添加一个易语言的使用查询 #361

Open
a12358920 opened this issue Aug 31, 2024 · 1 comment
Open

添加一个易语言的使用查询 #361

a12358920 opened this issue Aug 31, 2024 · 1 comment

Comments

@a12358920
Copy link

.版本 2
.支持库 e2ee

.程序集 ip2region
.程序集变量 qqwry数据, 字节集, , , qqwry文件内容
.程序集变量 sPtr, 整数型, , , 第一条ip记录的偏移地址
.程序集变量 ePtr, 整数型, , , 最后一条IP记录的偏移地址
.程序集变量 VectorIndexCols, 整数型
.程序集变量 VectorIndexSize, 整数型
.程序集变量 SegmentIndexSize, 整数型

.子程序 _初始化, , , 当基于本类的对象被创建后,此方法会被自动调用

.子程序 _销毁, , , 当基于本类的对象被销毁前,此方法会被自动调用

qqwry数据 = { }

.子程序 初始化, , 公开
.参数 IP文件数据, 字节集

qqwry数据 = IP文件数据
VectorIndexSize = 8
VectorIndexCols = 256
SegmentIndexSize = 14

.子程序 IP, 文本型, 公开
.参数 IP地址, 文本型
.局部变量 ipInt, 长整数型
.局部变量 l, 整数型
.局部变量 u, 整数型
.局部变量 m, 整数型
.局部变量 p, 整数型
.局部变量 buff, 字节集
.局部变量 sip, 长整数型
.局部变量 eip, 长整数型
.局部变量 dataLen, 短整数型
.局部变量 dataPtr, 长整数型
.局部变量 bin, 字节集

ipInt = ip2long (IP地址)
.如果真 (ipInt = 0)
返回 (“未知IP”)
.如果真结束

l = 0
u = (ePtr - sPtr) ÷ SegmentIndexSize
.判断循环首 (l ≤ u)
m = 到整数 ((l + u) ÷ 2) ' 计算近似中间记录
p = sPtr + m × SegmentIndexSize
buff = 取字节集中间 (qqwry数据, p + 1, 14)
sip = 取字节集数据 (取字节集中间 (buff, 0, 4), #长整数型, )
.判断开始 (ipInt < sip) ' 用户的IP小于中间记录的开始IP地址时
u = m - 1
.默认
eip = 取字节集数据 (取字节集中间 (buff, 5, 4), #长整数型, ) ' 获取中间记录的结束IP地址
.判断开始 (ipInt > eip)
l = m + 1
.默认
dataLen = 取字节集数据 (取字节集中间 (buff, 9, 1), #短整数型, ) ' 字符长度
dataPtr = 取字节集数据 (取字节集中间 (buff, 11, 4), #长整数型, ) ' 字符位置
' str = 取字节集数据 (取字节集中间 (qqwry数据, dataPtr + 1, dataLen), #文本型, )
bin = 取字节集中间 (qqwry数据, dataPtr + 1, dataLen) ' cha询出来的结果
返回 (到文本 (文本编码转换 (bin, , )))
.判断结束

.判断结束

.判断循环尾 ()
返回 (“cha询失败”)

.子程序 ip2long, 长整数型
.参数 IP地址, 文本型
.局部变量 IP, 文本型, , "0"
.局部变量 idx, 长整数型
.局部变量 指针, 整数型

IP = 分割文本 (IP地址, “.”, )
.如果真 (取数组成员数 (IP) ≠ 4)
返回 (0)
.如果真结束
idx = 到数值 (IP [1]) × VectorIndexCols × VectorIndexSize + 到数值 (IP [2]) × VectorIndexSize
sPtr = 取字节集数据 (取字节集中间 (qqwry数据, idx + 256 + 1, 8), #长整数型, )
ePtr = 取字节集数据 (取字节集中间 (qqwry数据, idx + 256 + 5, 8), #长整数型, )
返回 (到数值 (IP [4]) + 到数值 (IP [3]) × 256 + 到数值 (IP [2]) × 求次方 (256, 2) + 到数值 (IP [1]) × 求次方 (256, 3))

@robot-cn
Copy link

robot-cn commented Dec 5, 2024

谢谢大佬 分享

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants