源码pub:C#实现IPv6地址的二进制输出


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




 

转载于:https://www.cnblogs.com/Jason_z/archive/2009/10/16/1584479.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值