源碼pub:C#實現IPv6地址的二進位輸出

來源:互聯網
上載者:User

在msdn中文論壇上,遇到的一個問題,應樓主需求寫了相關代碼,沒多大技術含量,高手飄過吧。
下載本文相關樣本:
http://files.cnblogs.com/Jason_z/Ipv6ConvertTest.rar

如果你對IPv6地址的文法格式還不是很夠熟悉,建議閱讀:http://375362she.blog.51cto.com/365362/73629

樓主給出的IPv6地址 是:fe80::c960:55bf:bb18:611c ,熟悉IPv6的朋友知道,這是一個採用了壓縮零形式的IPv6地址,

這使問題變得有些麻煩,不過所幸的是IPv6裡只允許您使用一次零壓縮,要確定“::”代表多少位零,您可以計算壓縮地址中的塊數,用 8 減去此數就可以了。另外一個問題就是數實值型別的轉換,我們擷取的Ipv6地址應該是類似上面的十六進位形式,要轉化為二進位的形式,就應該先將十六進位轉化為十進位,再將十進位轉化為二進位:

PS:其他進位轉化如下
//十進位轉二進位
Console.WriteLine(Convert.ToString(69, 2));
//十進位轉八進位
Console.WriteLine(Convert.ToString(69, 8));
//十進位轉十六進位
Console.WriteLine(Convert.ToString(69, 16));
//二進位轉十進位
Console.WriteLine(Convert.ToInt32(”100111101″, 2));
//八進位轉十進位
Console.WriteLine(Convert.ToInt32(”76″, 8));
//十六進位轉十進位
Console.WriteLine(Convert.ToInt32(”FF”, 16));

還是公布源碼吧:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace Ipv6ConvertTest
{
    class Program
    {
        static void Main(string[] args)
        {
            string str = "fe80::c960:55bf:bb18:611c";         

            string[] str1 = Regex.Split(str, @"[:]+");

            //IP地址沒有採用壓縮零的形式
            if (str1.Length == 8)
            {
                for (var i = 0; i < str1.Length; i++)
                {
                    Console.Write(Convert.ToString(Convert.ToUInt32(str1[i], 16), 2));

                    if (i != str1.Length - 1)
                    {
                        Console.Write(":");
                    }
                }
            }
            
            //IP地址採用壓縮零的形式
            else
            {
                //不採用壓縮零的形式輸出
                for (var j = 0; j < str1.Length; j++)
                {                   
                    str = str.Replace(str1[j], Convert.ToString(Convert.ToUInt32(str1[j], 16), 2));
                }

                Console.WriteLine(str);
                 
                
                /*不採用壓縮零的形式輸出
                 * int m = 8 - str1.Length;//計算壓縮零的個數
                 * string tmp1 = "";//儲存壓縮零字串
                 * for (var k = 0; k < m; k++)
                 * {
                 *     tmp1 += "0:";
                 * }
                 * for (var j = 0; j < str1.Length; j++)
                 * {                      
                        str = str.Replace(str1[j], Convert.ToString(Convert.ToUInt32(str1[j], 16), 2));
                 * }
                 * str=str.replace("::",":"+tmp1);
                 * Console.WriteLine(str);
                */               
            }
            Console.ReadKey();
        }
    }
}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.