进制转换

  1   private void Window_Loaded(object sender, RoutedEventArgs e)
  2         {
  3             int i = 255;
  4             string str1 = Convert.ToString(i, 2);  //10->2   11111111 (有符号)
  5             string str2 = Convert.ToString(i, 16); //10->16  ff (有符号)
  6             string str3 = i.ToString("X2");        //10->16  FF (有符号)
  7             string str3_1 = i.ToString("X4");      //10->16  00FF (有符号)
  8             string str3_2 = i.ToString("x4");      //10->16  00ffff (有符号)
  9             /*x或X 区别在于16进制中A-F字母的大小写
 10              X后数字代表长度*/
 11 
 12             string i2 = "11111111";
 13             int a = Convert.ToInt32(i2, 2);       //2->10 (有符号)
 14             string strA = Convert.ToInt32(i2, 2).ToString("X2"); //2->16 (有符号)
 15 
 16             string i3 = "FF";
 17             int str4 = Convert.ToInt32(i3, 16); //16->10
 18             int str5 = int.Parse(i3, System.Globalization.NumberStyles.HexNumber); //16->10 (有符号)
 19             string str6 = Convert.ToString(0xFF, 2); //16->2 (有符号)
 20 
 21             /*
 22              * 负数在计算机系统中是以补码形式存储的 
 23              * 负数的原码和其绝对值的原码是相同的。
 24              * 各位按位取反,获得反码,反码加1 则是补码
 25              * 
 26              * 一个字节在只能表示256个数字
 27              * 首先定义0在计算机中储存为00000000,
 28              * 从00000001到01111111依次表示1到127 10000001到11111111依次表示-127到-1 10000000是-128
 29              * -1 原码:00000001 反码 11111110 补码 1111111
 30              */
 31         }
 32 
 33         /// <summary>
 34         /// 负数转十六进制
 35         /// </summary>
 36         /// <param name="iNumber"></param>
 37         /// <returns></returns>
 38         public static string NegativeToHexString(int iNumber)
 39         {
 40             string strResult = string.Empty;
 41 
 42             if (iNumber < 0)
 43             {
 44                 iNumber = -iNumber;
 45 
 46                 string strNegate = string.Empty;
 47 
 48                 char[] binChar = Convert.ToString(iNumber, 2).PadLeft(8, '0').ToArray();
 49 
 50                 foreach (char ch in binChar)
 51                 {
 52                     if (Convert.ToInt32(ch) == 48)
 53                     {
 54                         strNegate += "1";
 55                     }
 56                     else
 57                     {
 58                         strNegate += "0";
 59                     }
 60                 }
 61 
 62                 int iComplement = Convert.ToInt32(strNegate, 2) + 1;
 63 
 64                 strResult = Convert.ToString(iComplement, 16).ToUpper();
 65             }
 66 
 67             return strResult;
 68         }
 69 
 70         /// <summary> 
 71         /// 十六进制转为负数
 72         ///</summary>
 73         ///<param name="strNumber"></param>
 74         ///<returns></returns>
 75         public static int HexStringToNegative(string strNumber)
 76         {
 77             int iNegate = 0;
 78             int iNumber = Convert.ToInt32(strNumber, 16);
 79 
 80             if (iNumber > 127)
 81             {
 82                 int iComplement = iNumber - 1;
 83                 string strNegate = string.Empty;
 84 
 85                 char[] binChar = Convert.ToString(iComplement, 2).PadLeft(8, '0').ToArray();
 86 
 87                 foreach (char ch in binChar)
 88                 {
 89                     if (Convert.ToInt32(ch) == 48)
 90                     {
 91                         strNegate += "1";
 92                     }
 93                     else
 94                     {
 95                         strNegate += "0";
 96                     }
 97                 }
 98 
 99                 iNegate = -Convert.ToInt32(strNegate, 2);
100             }
101 
102             return iNegate;
103         }
View Code

 

posted on 2014-12-23 11:13  象山  阅读(131)  评论(0)    收藏  举报

导航