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

你可能感兴趣的:(C++,c,PHP,C#)