`
sofire
  • 浏览: 144223 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ip2long和long2ip的学习程序

阅读更多
这2个是PHP里面的常用函数,用D重新包装了一下。
虽然可以使用,但没有错误判断。

顺便练习了一下C字符串和D字符串之间的转换。

import std.stdio;
import std.string;

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;
    }
}

ulong 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));
}

void main()
{
    char* c_str1;
    char* c_str2;
    char* c_str3;
    char[] d_str1;
    char[] d_str2;
    char[] d_str3;

    c_str1 = "C string";
    d_str1 = "D string";

    // C字符串 转换到 D字符串
    d_str2 = toString(c_str1);

    writefln("c to d: %s", d_str2);
    printf("c to d: %.*s"\n, d_str2);

    // D字符串 转换到 C字符串
    c_str2 = cast(char*) (d_str1 ~ "\0");
    c_str3 = toStringz(d_str1);

    printf("d to c: %s"\n, c_str2);
    printf("d to c: %s"\n, c_str3);
    
    // cast(char*)转换和直接str.ptr是一样的,不保证有\0结尾,除非运气好刚好碰上一个。
    //c_str2 = cast(char*) (d_str1); //error
    //printf("%s"\n, d_str1.ptr);   // error

    writefln(ip2long("192.0.34.166"));
    writefln(long2ip(3221234342));
}
分享到:
评论

相关推荐

    Java_IPv4转换_ip2long_long2IP

    Java_IPv4转换_ip2long_long2IP,与php/java/javascript互相兼容

    ip转换为long

    IP转换,输入ip返回long型数据,输入long型数据,返回IP

    详谈php ip2long 出现负数的原因及解决方法

    1、ip2long — 将一个IPV4的字符串互联网协议转换成数字格式 int ip2long ( string $ip_address ) 参数: ip_address 一个标准格式的地址。 返回值: 返回IP地址转换后的数字 或 FALSE 如果 ip_address 是无效的。 2...

    go语言版的ip2long函数实例

    本文实例讲述了go语言版的ip2long函数。分享给大家供大家参考。具体分析如下: 这里介绍的go语言版的ip2long 函数不会对 IP 的合法性进行校验。 代码如下:// 注意: 该函数不会对 IP 的合法性进行校验 func Ip2Long...

    ip转成Long

    用java写的ip转成Long数据类型的UDF函数,在hive中查询IP对应的省、市必须用到的函数

    ip地址转long,long转ip

    该类可以将long型数据转换为Ip格式字符串,将ip格式字符串转换为long

    php IP转换整形(ip2long)的详解

    PHP里有这么一个函数ip2long.比如复制代码 代码如下:<?phpecho ip2long(“10.2.1.3”);?>我们将得到167903491这是如何计算的,目前我知道有两个算法。其一复制代码 代码如下:<?phpfunction ip2int($ip){ /...

    探讨PHP函数ip2long转换IP时数值太大产生负数的解决方法

    【造成原因】:Because PHP’s integer type is signed, and many IP addresses will result in negative integers. ...即,printf( ‘%u’, ip2long( ‘IP地址’ ) ); 或者将其先转换为二进制然后在转换为十进制,b

    linux点分十进制IP转换为long型

    linux点分十进制IP转换为long型 网络字节序与主机字节序互转

    IP地址转化为长整型long

    NULL 博文链接:https://meohao.iteye.com/blog/749530

    IP地址原理,IP地址原理,IP地址原理

    IP地址原理,很好! IP地址原理,很好 IP地址原理,很好 IP地址原理,很好 IP地址原理,很好 IP地址原理,很好

    20130415整理好的IP地址数据库 MDB

    public static String long2IP(long longIP) { StringBuilder sb = new StringBuilder(""); sb.Append(longIP >> 24); sb.Append("."); sb.Append((longIP & 0x00FFFFFF) >> 16); sb.Append("."); sb.Append...

    20130310整理过的IP数据库只含省市地县数据mdb

    public static String long2IP(long longIP) { StringBuilder sb = new StringBuilder(""); sb.Append(longIP >> 24); sb.Append("."); sb.Append((longIP & 0x00FFFFFF) >> 16); sb.Append("."); sb.Append...

    纯真IP数据库(2008-11-15)SQL版

    可使用Ip2long.java中的ip2long(String ip)方法将您的IP转换成长整型。 用以下语句查出相应的记录 SELECT description FROM wn_ip_dic WHERE #ip# >= startip and #ip# LIMIT 1 --------------------...

    IP归属地分段处理库

    f3 = Long.parseLong(tokens[2]) ; f4 = Long.parseLong(tokens[3]); //System.out.println(f1+f2+f3+f4+"...."); long result=f1+f2+f3+f4; return result+""; } catch (Exception e) { return -1+""; } ...

    LimitIp.cs

    long c = int.Parse(ip[2]); long d = int.Parse(ip[3]); return a * 256 * 256 * 256 + b * 256 * 256 + c * 256 + d; } /// /// 判断客户端的IP是否在某个ip段中 /// /// <param name="clientIp">...

Global site tag (gtag.js) - Google Analytics