• telnet://2356194315
  • telnet://140.112.172.11
  • telnet://ptt.cc

其實這也不是什麼新梗啦,就只是把 IPv4 換成 Unsigned Integer 的表示法而已。

只是我用 Yahoo! Pipes 做了兩個轉換器(互轉,IPv4 → Unsigned Int 以及 反過來),所以演算法就請在各別的 pipe 編輯原始檔就可以看到囉。(文末有 C Code)

雖然不是什麼新梗,但還是記一下它的原理好了。

如你所知道的,IPv4 是由四組 0 - 255 的數字組成的,表記如 140.112.172.11 這種格式。但這種表記法是為了讓人類易於記憶,真正在電腦裡面是表示成二進位:

IPv4 140 112 172 11
 
二進位 10001100 01110000 10101100 00001011
接成一條 10001100011100001010110000001011
轉成十進 2356194315

 

原理就這樣,所以 IPv4 可以寫成 unsigned int 表記法。至於 Pipes 裡面用到了幾個偷懶的方法,是從 2 進位 ←→ 10 進位中運用的「位權」概念而來的。


沒 code 沒真相,附如下:

IPv4 to Unsigned Int

nopa 著色版備份Yahoo! Pipes

[sourcecode language=’cpp’]

#include

int main (void)
{
double sum;
int i;

 int ip [4];<br />
 double base [4] = {16777216, 65536, 256, 1};

 while (scanf ("%d.%d.%d.%d",<br />
         &amp;ip[0], &amp;ip[1], &amp;ip[2], &amp;ip[3]) == 4)<br />
 {<br />
     sum = 0;<br />
     for (i = 0; i &lt;= 3; i++)<br />
         sum = sum + ip [i] * base [i];

     printf (&quot;%l.0f\n&quot;, sum);<br />
 }<br />
 return 0;<br />  }

[/sourcecode]


Unsigned Int to IPv4

nopa 著色版備份Yahoo! Pipes

[sourcecode language=’cpp’]
#include

int main (void)
{
unsigned int sum;
int i;

 int ip [4];<br />
 unsigned int base [4] = {16777216, 65536, 256, 1};

 while (scanf ("%d", &amp;sum))<br />
 {

     for (i = 0; i &lt;=3; i++)<br />
     {<br />
         ip [i] = sum / base [i];<br />
         sum -= base [i] * ip [i];<br />
     }

     printf (&quot;%d.%d.%d.%d\n&quot;,<br />
             ip [0], ip [1], ip [2], ip [3]);<br />
 }

 return 0;<br />  }<br /> [/sourcecode]

btw 這好像不是 Yahoo! Pipes 真正的用途 …