2017-01-03 23 views
0

我想寫一個程序,測試如果字符串是一個有效的二進制文件,並將其轉換爲十進制?下面是我的代碼不能正常工作有人可以給我一個在c#中的示例程序算法嗎?

private void BinarytoDecimal_Click(object sender, EventArgs e) 
    { 
     string a = ""; 

     a = toBeConverted.Text; 
     long y; 
     y = Convert.ToInt64(a); 
     for (int x = 0; x < a.Length; x++) 
     { 
      char h = a[x]; 
      if (h > '1' && h < '0') 
      { 
       MessageBox.Show("it is not a valid binary"); 
       break; 
      } 
      if(x == a.Length - 1) 
      { 
       long d = 0 , i = 0 , r , n; 
       n = Convert.ToInt64(a); 
       while (n != 0) { 
        r = n % 10; 
        n /= 10; 
        d += r * Math.Pow(2, i); 
        ++i; 
       } 

       labelConverted.Text = d.ToString() + " base10"; 


      } 


     } 
    } 
+1

爲什麼不'Convert.ToInt32( 「YourBinaryString」,2)的ToString();' –

+0

見https://msdn.microsoft.com/en-us /library/1k20k614.aspx有關使用基地轉換的詳細信息。 – paxdiablo

回答

1

BTW它的一個襯墊代碼中使用

Convert.ToInt32("YourBinaryString", 2).ToString(); 

的二進制字符串轉換成十進制轉換但是,如果你沒有LINQ尋找比

var s = "101011"; //Your Binary String 
var dec = 0; 

var bl = Regex.Match(s, @"[-01]*"); 
if(s == bl.Value) 
{ 
    for(int i=0; i<s.Length; i++) 
    { 
     if(s[s.Length-i-1] == '0') 
      continue; 

     dec += (int)Math.Pow(2, i); 
    } 
} 
+0

爲什麼你會在評論中給出一個完全可以接受的答案,然後提供這個怪物作爲答案? :-) – paxdiablo

+0

Bcoz的標題說OP正在尋找算法...看來OP想要一些公式轉換不直接轉換回來。只是假設 –

+0

我會刪除對LINQ的引用,因爲沒有任何內容是基於LINQ的。也許「如果你正在尋找一種算法,而不是一個班輪」? – paxdiablo

0

所以,你要檢查輸入的字符串是否是一個有效的二進制數,並希望將其轉換爲十進制吧?

下面的代碼將幫助您:

string inputStr = toBeConverted.Text; 
if(inputStr.All(x=> x=='1' || x=='0')) // check all character is either 0 or 1 
{ 
// it is a valid binary 
string output = Convert.ToInt32(inputStr , 2).ToString(); 
} 
else 
{ 
    // Display message that not a valid binary 
} 
+0

是不是'-1001'有效的二進制文件?從'Convert()'捕獲異常可能會更好。 – paxdiablo

+0

@paxdiablo:從'轉換cating異常()'是一個不錯的主意,但'-1001'不是有效的二進制值,'Convert.ToInt32( 「 - 101」,2)'拋出錯誤 –

+0

非常感謝球員 –

相關問題