- 浏览: 147410 次
- 性别:
- 来自: 北京
-
文章分类
最新评论
-
wokcao:
这里的platforms是linux的版本么?
Android SDK Download List -
zhangtianfeng:
我看了 一些D语言的一些介绍,对于的产生还是有的疑惑.
Dmd编译器学习笔记 -
qiezi:
.so文件是用-L来指定的,比如gcc的-levent是用来链 ...
Dmd编译器学习笔记 -
tomqyp:
...
Ddoc文档注释学习笔记 -
sofire:
转换成其他语言?是说用汉字吗?
Ddoc文档注释学习笔记
改写了QQIP地址库的查询程序,学习了怎么操作文件。
也学会了正确使用tar命令。
本来想把 ip.d ip.php 和 QQWry.dat 文件打包成 a.tgz的,
结果把命令写成了 tar czf ip.d ip.php QQWry.dat a.tgz
把辛辛苦苦的写的程序给覆盖了:(
重新写了一遍,发现还是很快的。
也学会了正确使用tar命令。
本来想把 ip.d ip.php 和 QQWry.dat 文件打包成 a.tgz的,
结果把命令写成了 tar czf ip.d ip.php QQWry.dat a.tgz
把辛辛苦苦的写的程序给覆盖了:(
重新写了一遍,发现还是很快的。
/** * QQWry.dat IP地址库的查找程序 * Edit by Liu Dehong @ 2007/08/08 * Version: 1.0.0 * * 改编自 马秉尧 的PHP程序 * QQWry.dat 来自于 CZ88.net * Q数据库的格式参考:http://www.pconline.com.cn/pcedu/empolder/gj/java/0505/612860.html */ import std.stdio; import std.stream; import std.string; import std.math; extern(C) { uint ntohl(uint); uint inet_addr(char *cp); uint htonl(uint hostlong); char* inet_ntoa(in_addr); struct in_addr { uint s_addr; } } uint ip2long(char[] ip) { return ntohl(inet_addr(toStringz(ip))); } char[] long2ip(ulong ip) { in_addr myaddr; myaddr.s_addr = htonl(ip); return toString(inet_ntoa(myaddr)).dup; } class IpLocation { private File m_file; private uint m_firstip; // 第一条IP记录的偏移地址 private uint m_lastip; // 最后一条IP记录的偏移地址 private uint m_totalip; // IP记录的总条数(不包含版本信息记录) static assert (int.sizeof == 4); static assert (uint.sizeof == 4); static assert (long.sizeof == 8); /* 从文件读取4个字节,返回整型数 */ uint get4Byte() { uint i; m_file.read(i); return i; } /* 从文件读取3个字节的数据,返回整型数 */ uint get3Byte() { ubyte c; uint sum; int[3] pow = [1, 256, 256*256]; /** * 如读取的是 2 34 56 ,则结果是 2 + 34*256 + 56*256*256 */ for (int i; i < 3; i++) { m_file.read(c); sum += c * pow[i]; } return sum; } /* 返回读取的字符串 */ char[] getString() { debug(1) writefln("GetString's pos: %d(%X)", m_file.position, m_file.position); ubyte c; char[] str = new char[100]; // guess int i; for (i = 0; true; i++) { m_file.read(c); if (c == 0) // 字符串按照C格式保存,以\0结束 break; if (i == str.length) str.length = str.length * 2; str[i] = c; } str.length = i; return str; } /* 返回地区信息 */ char[] getArea() { debug(1) writefln("GetArea's pos: %d(%X)", m_file.position, m_file.position); ubyte flag; // 标志字节 char[] area; m_file.read(flag); switch (flag) { case 0: // 没有区域信息 area = ""; break; case 1: case 2: // 标志字节为1或2,表示区域信息被重定向 m_file.position(get3Byte()); area = getString(); break; default: // 否则,表示区域信息没有被重定向 area = cast(char)flag ~ getString(); // flag 是一个字符 break; } return area; } /* 根据所给 IP 地址或域名返回所在地区信息 * 索取区按照地址从小到大排列,用折半算法查找 */ string[string] getLocation(char[] addr) { if ( ! m_file.readable) return null; /* 查找纪录区的位置 */ uint l = 0; // 搜索的下边界 uint u = m_totalip; // 搜索的上边界 uint findip = m_lastip; // 如果没有找到就返回最后一条IP记录(QQWry.Dat的版本信息) uint i; uint beginip; uint endip; auto ip_t = ip2long(addr); while (l <= u) // 当上边界小于下边界时,查找失败 { i = std.math.lround((l + u) / 2); m_file.position(m_firstip + i * 7); m_file.read(beginip); if (ip_t < beginip) { u = i - 1; } else { m_file.position(get3Byte()); m_file.read(endip); if (ip_t > endip) { l = i + 1; } else { findip = m_firstip + i * 7; // find it break; } } } debug(1) writefln("Findip is: %d(%#X)", findip, findip); /* 获取查找到的IP地理位置信息 */ string[string] location; m_file.position(findip); location["beginip"] = long2ip(get4Byte()); // 用户IP所在范围的开始地址 auto offset = get3Byte(); m_file.position(offset); location["endip"] = long2ip(get4Byte()); // 用户IP所在范围的结束地址 ubyte flag1, flag2; // 标志字节 m_file.read(flag1); switch (flag1) { case 1: // 标志字节为1,表示国家和区域信息都被同时重定向 auto countryOffset = get3Byte(); // 重定向地址 m_file.position(countryOffset); m_file.read(flag2); // 标志字节 switch (flag2) { case 2: // 标志字节为2,表示国家信息又被重定向 m_file.position(get3Byte()); location["country"] = getString(); m_file.position(countryOffset + 4); location["area"] = getArea(); break; default: // 否则,表示国家信息没有被重定向 location["country"] = cast(char)flag2 ~ getString(); // flag2 是一个字符 location["area"] = getArea(); break; } break; case 2: // 标志字节为2,表示国家信息被重定向 m_file.position(get3Byte()); location["country"] = getString(); m_file.position(offset + 8); // IP地址(4B) + 定向模式(1B) + 偏移地址(3B) location["area"] = getArea(); break; default: // 否则,表示国家信息没有被重定向 location["country"] = cast(char)flag1 ~ getString(); // flag1是一个字符 location["area"] = getArea(); break; } debug(1) writefln("Flag1&2 : %d %d", flag1, flag2); if (location["country"] == " CZ88.NET") // CZ88.NET表示没有有效信息 { location["country"] = "unkown"; } if (location["area"] == " CZ88.NET") { location["area"] = ""; } return location; } /** * 构造函数,打开 QQWry.Dat 文件并初始化类中的信息 */ this(char[] filename = "QQWry.Dat") { m_file = new File(filename); m_firstip = get4Byte(); m_lastip = get4Byte(); m_totalip = (m_lastip - m_firstip) / 7; } uint firstip() { return m_firstip; } uint lastip() { return m_lastip; } uint totalip() { return m_totalip; } } void main() { auto ipObj = new IpLocation; writefln("First IP is: %s", ipObj.firstip); writefln("Last IP is : %s", ipObj.lastip); writefln("Total ip is: %s", ipObj.totalip); string[] myips = [ "0.255.255.255", "0.255.255.255", "1.255.255.255", "4.10.255.255", "4.10.255.255", "4.19.77.255", "59.57.7.206", "222.79.141.30", "211.100.32.245", "202.106.184.145", "202.205.82.122", "0.1.163.136", ]; string[string] loc; foreach (int k, string v; myips) { loc = ipObj.getLocation(v); printf("%*s in [%.*s ~ %.*s]"\n, v, loc["beginip"], loc["endip"]); printf("Country: %-20.*s Area: %-20.*s"\n, loc["country"], loc["area"]); } }
- IpLocation.zip (3.2 MB)
- 描述: 包括:D语言的源程序,PHP版本的程序,QQWry的数据库文件和格式说明文件
- 下载次数: 44
发表评论
-
Dmd编译器学习笔记
2007-08-15 17:28 4650Dmd编译器学习笔记 英文原文在这里: http://dig ... -
Ddoc文档注释学习笔记
2007-08-14 02:49 4914Ddoc学习笔记 ddoc的英文 ... -
[zt]D语言编译器下载安装和编译参数
2007-08-13 10:53 5570Javaeye的html编辑器用起来不爽。 不知道怎么用UBB ... -
Build编译工具学习笔记:常用命令参数和BRF文件
2007-08-12 23:42 6086build工具的主页在:http://www.dsource. ... -
iconv库函数的学习程序
2007-08-11 23:40 4949以前用php的iconv函数, ... -
用expat 库解析XML的学习例子
2007-08-10 17:20 4712用bcdgen转换的头文件。 对xml不大感兴趣。只是尝试用D ... -
memcached函数的学习程序
2007-08-10 12:26 2760尝试把 libmemcached的示例程序改成D语言的。 源程 ... -
ip2long和long2ip的学习程序
2007-08-08 13:00 3019这2个是PHP里面的常用函数,用D重新包装了一下。 虽然可以使 ... -
md5函数的学习程序
2007-08-07 15:52 1528前面部分是库文件里面的例子,后面是我改的。 写起来和PHP差不 ... -
writef和printf函数的学习程序
2007-08-07 15:29 2391和C函数的格式相同。 只是printf和writef中的 s ... -
【备忘】D语言编译器的下载地址、安装方法
2007-08-07 00:09 2210在D语言主页上,老是找不到编译器的安装程序。 后来好不容易一个 ... -
base64函数的学习程序
2007-08-06 20:17 3512import std.stdio; import std.b ...
相关推荐
QQWry.DatIP数据库是网络上广泛使用的IP地址数据库,它包含了全球众多IP地址的地理定位信息。这个数据库主要用于帮助系统快速识别和定位互联网用户的地理位置。2011年发布的IPData 2011最新版IP库,是当时最新的IP...
该教程含路径设置,路径名称注意,具体配置步骤,环境搭建说明书。
寻找热泵最佳压力的优化算法 输入Cop和高压值,以找到最大化Cop的最佳高压 Optimization algorithm to find optimal pressure of heat pump Inputs of Cop and high pressure values to find optimal high pressure that maxes out COP
用友大易2024年AI才有道-AI在企业招聘中的应用现状报告51页.pdf
基于ATP软件的10kV并联电容暂态过程仿真分析与研究,ATP驱动下的10kV并联电容暂态过程精细仿真分析,基于ATP的10kV并联电容暂态过程仿真 ,基于ATP的; 10kV并联电容; 暂态过程; 仿真,ATP算法在10kV电容暂态仿真过程的应用研究
勾正科技恒者行远思者常新-2023H1中国家庭智能大屏行业发展白皮书83页.pdf
“中国房产数据库-各省出租房屋面积 (平方米) 2005-2017年”是一份系统记录中国31个省份在13年间出租房屋面积变化的社会经济数据集,覆盖2005年至2017年间的年度数据。该数据库整合了国家统计局及地方统计年鉴的公开信息,包含各省(含港澳台)的出租房屋面积总量、增长率及区域分布特征,数据格式提供Excel和GIS矢量文件,支持空间分析与时间序列对比。 数据显示,2005-2017年间全国出租房屋面积从1.2亿平方米增至2.8亿平方米,年均增长率达6.7%。区域差异显著:东部沿海地区因经济活跃度高,出租房屋面积占比超60%,其中广东省以年均8.2%的增速居首;中西部省份如四川、河南等则呈现阶段性波动,与人口回流及城镇化政策调整密切相关。 该数据为研究房地产市场供需关系、人口流动模式及城市化进程提供了量化依据。例如,出租房屋面积增长率与GDP增速的相关性分析可揭示经济活力对住房租赁市场的影响;结合户籍人口与常住人口数据,可评估流动人口住房保障政策的实施效果。数据还可用于分析住房租赁市场与房价调控政策的互动关系,为完善住房保障体系提供实证支持。
ABB机器人二次开发实战:C#读写数据操作指南,获取与写入点位信息功能详解,ABB机器人二次开发实战:C#读写数据操作指南,获取与写入点位信息应用,ABB机器人二次开发 C#读取和写入数据,可以获取点位信息及写入点位信息。 自己写的ABB机器人类,机器人常规操作功能都有,非常适合进行二次开发。 ,ABB机器人二次开发; C#读取和写入数据; 读取点位信息; 写入点位信息; 机器人常规操作功能。,ABB机器人二次开发:C#读取与写入数据,轻松获取与编辑点位信息
wireshark log for ethercat
深入解析:Fluent仿真技术在气冷涡轮叶片冷却性能数值模拟中的应用与教学视频指南,《气冷涡轮叶片冷却性能数值模拟——Fluent仿真技术与教学视频》,Fluent仿真,气冷涡轮叶片冷却性能数值模拟(含教学视频) ,根据您提供的内容,可以提炼出以下三个核心关键词: Fluent仿真;气冷涡轮叶片;冷却性能数值模拟 用分号分隔的结果为:Fluent仿真;气冷涡轮叶片;冷却性能数值模拟 希望以上结果符合您的要求。,好的,以下是根据您提供的关键信息所提炼的标题: 气冷涡轮叶片Fluent仿真及冷却性能数值模拟教学视频 这个标题直接明了地概括了您所提供的信息,希望符合您的要求。
linux http 服务器 get put 请求
酷云互动2019智能大屏生态发展白皮书精简版47页.pdf
系统选用B/S模式,后端应用springboot框架,前端应用vue框架, MySQL为后台数据库。 本系统基于java设计的各项功能,数据库服务器端采用了Mysql作为后台数据库,使Web与数据库紧密联系起来。 在设计过程中,充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。
更多毕业设计https://cv2022.blog.csdn.net/article/details/124463185
欧姆龙PLC案例分享:新能源锂电行业全无加密程序,公司级框架,NJ Socket功能PC端作为服务器,欧姆龙NJ NXPLC全程序案例:锂电机械人控制,设备状态监控与报警管理,三色灯与气缸控制等功能模块详解,欧姆龙NJ NXPLC 全ST程序案例,全程序无加密,公司级框架,锂电新能源行业FB库文件,NJ Socket功能PC端作为服务器,NJ作为客户端,汇川机械人控制,设备状态机,设备PPM,运行时间,报警时间,OK产量,NG数量,蜂鸣器三色灯控制功能块,气缸报警功能块,气缸真空动作功能块,轴控制功能块,等等 ,核心关键词:欧姆龙NJ NXPLC; 全ST程序案例; 无加密; 公司级框架; 锂电新能源; FB库文件; NJ Socket功能; PC端服务器; NJ客户端; 汇川机械人控制; 设备状态机; 运行时间; 报警时间; OK产量; NG数量; 蜂鸣器三色灯控制; 气缸报警功能块; 气缸真空动作功能块; 轴控制功能块。,欧姆龙PLC程序案例:新能源锂电设备状态监控与控制功能实现
基于Simulink的35kV变电站三相故障仿真研究:深入探讨变压器与线路的故障响应与保护策略,基于Simulink的35kV变电站三相故障仿真研究:变压器与线路的联合仿真分析,基于simulink的35kv变电站三相故障仿真,包含变压器和线路 ,基于Simulink的35kv变电站仿真; 三相故障; 变压器; 线路。,基于Simulink的35kV变电站变压器与线路三相故障仿真研究
三菱FX3U六轴标准程序:轴点动、回零、相对定位与绝对定位的控制,包含扩展的1PG定位模块和多功能气缸驱动的转盘流水线,三菱FX3U六轴标准程序:轴点动、回零、相对定位、绝对定位,搭配气缸与DD马达控制的转盘实现多工位流水作业,三菱FX3U六轴标准程序,程序包含本体3轴控制,扩展3个1PG定位模块,一共六轴。 程序有轴点动控制,回零控制,相对定位,绝对定位。 另有气缸数个,一个大是DD马达控制的转盘,整个是转盘多工位流水作业方式 ,核心关键词:三菱FX3U六轴标准程序; 3轴控制; 1PG定位模块; 轴点动控制; 回零控制; 相对定位; 绝对定位; DD马达控制转盘; 转盘多工位流水作业。,三菱FX3U六轴程序控制:转盘流水作业及三轴+定位模块综合运动控制
《都市供求信息网》是一个基于JavaWeb技术开发的毕业设计项目,旨在为用户提供便捷的信息发布和交流平台。该系统拥有友好的界面与强大的功能,适合各类信息的发布与查询。如果你对JavaWeb开发感兴趣,欢迎下载完整资源,助力你的学习与实践!
基于雨流计数法的双层协同优化配置:源-荷-储系统中的能量存储优化,基于雨流计数法的源荷储双层协同优化配置:储能系统寿命评估与充放电曲线优化,基于雨流计数法的源-荷-储双层协同优化配置 关键词:双层规划 雨流计算法 储能优化配置 参考文档:《储能系统容量优化配置及全寿命周期经济性评估方法研究》第三章 仿真平台:MATLAB CPLEX 主要内容:代码主要做的是一个源荷储优化配置的问题,采用双层优化,外层优化目标的求解依赖于内层优化的储能系统充放电曲线,基于储能系统充放电曲线,采用雨流计数法电池健康状态数学模型,对决策变量储能功率和容量的储能系统寿命年限进行评估;内层储能系统充放电曲线的优化受外层储能功率和容量决策变量的影响,不同的功率和容量下,储能装置的优化充放电功率曲线存在差异。 代码非常精品,注释保姆级,靠谱值得信赖。 ,双层规划;雨流计数法;储能优化配置;充放电曲线;电池健康状态。,基于雨流计数法的双层协同储能优化配置研究