`
sofire
  • 浏览: 145382 次
  • 性别: 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互相兼容

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

    `ip2long` 和 `long2ip` 这两个函数提供了解决这个问题的便捷方式。本文将详细讨论`ip2long` 函数出现负数的原因以及相应的解决方法。 `ip2long` 是一个PHP内置函数,其功能是将一个符合标准格式的IPv4地址转换为32...

    ip转换为long

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

    go语言版的ip2long函数实例

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

    ip转成Long

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

    IP地址转化为长整型long

    在提供的"IP2Long.txt"文件中,可能包含了更多关于此话题的源码或解释。阅读该文件可以进一步了解IP地址转长整型的细节和应用。在实际编程中,我们应确保正确处理各种边界情况,如无效的IP地址、异常处理等,以确保...

    ip地址转long,long转ip

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

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

    `ip2long()`函数在处理这种点分十进制格式的IP地址时,会将其转换为单一的32位数字,便于存储和计算。 首先,让我们深入理解`ip2long()`的工作原理。对于一个IP地址,例如"10.2.1.3",它实际上可以被视为一个32位二...

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

    另一种方法是先使用`ip2long()`将IP地址转换为有符号的32位整数,然后将这个整数转换为二进制,再将二进制字符串转换回十进制。这可以避免整数溢出的问题: ```php $strIp = '182.118.0.0'; echo bindec(decbin...

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

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

    IP地址归属地查询程序(PHP)

    1. **IP地址解析**:PHP中可以使用`ip2long()`函数将IP地址转换为整数,便于处理。同时,`long2ip()`函数则可将整数形式的IP地址转换回字符串形式。 2. **IP数据库**:查询IP归属地需要一个包含IP地址和对应地理...

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

    IP地址是互联网的基础,它是每个设备在互联网上独一无二的身份标识。IP地址的全称为“Internet Protocol Address”,即...通过深入学习IP地址的相关概念和机制,我们可以更好地理解和利用这个全球互联的数字世界。

    TCP/IP通信程序

    总的来说,"TCP/IP通信程序"涉及到的知识点包括:TCP/IP协议原理、Socket编程、Windows下的Winsock库、`WsaasyncSelect`函数的异步事件模型,以及服务器和客户端的交互流程。这些知识点构成了网络通信中的基础部分,...

    php版纯真ip数据库

    if (ip2long($ip) >= ip2long($start_ip) && ip2long($ip) <= ip2long($end_ip)) { return $location; } } return '未知'; } // 使用示例 $ip = '192.168.0.1'; echo ip_location($ip); // 输出对应位置信息 `...

Global site tag (gtag.js) - Google Analytics