2016-08-13 124 views
2

不知道我是否處於正確的方向。 我無法找到有關代字號的信息。如何將十進制轉換爲二進制將其與〜顛倒並將其轉換回十進制

int n = 5; 
int m = ~n; 

string numAsString = Convert.ToString(~n, 2); 

char[] NumAsChar = numAsString.ToCharArray(); 

long l = Convert.ToInt64(numAsString, 2); 

Console.WriteLine(numAsString); 
Console.WriteLine(l); 
+2

「波浪運算符」 或相當[按位求補操作]的文檔(https://msdn.microsoft.com/en-us/library/d2bd4x66.aspx)。對於其他問題,你必須更多地解釋例如什麼是預期的結果?爲什麼你想從/轉換爲二進制**表示**?等等。 – Sehnsucht

回答

0

使用這2種方法

static byte[] GetBytes(string str) 
{ 
    byte[] bytes = new byte[str.Length * sizeof(char)]; 
    System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length); 
    return bytes; 
} 

static string GetString(byte[] bytes) 
{ 
    char[] chars = new char[bytes.Length/sizeof(char)]; 
    System.Buffer.BlockCopy(bytes, 0, chars, 0, bytes.Length); 
    return new string(chars); 
} 

,然後用它們這樣

byte[] bytes = GetTheBytes(str); 
byte[] reversed = bytes.Reverse().ToArray(); 
var revStr = GetString(reversed) 
+1

〜不反轉字節,它反轉它們。 0 - > 1和1 - > 0 –

3

你可能尋找一個簡單的答案。

int n = 5; 
byte[] nbytes = BitConverter.GetBytes(n); 
for(int i = 0 ; i < nbytes.Length; i++) 
    nbytes[i] = ~nbytes[i]; 
n = BitConverter.ToInt32(nbytes, 0); 

編輯:你實際上做不到〜在一個byte []上。你也可以做

for(int i = 0 ; i < nbytes.Length; i++) 
    nbytes[i] = ~nbytes[i]; 

或者根本不使用字節數組。

爲了清楚起見,請注意,你可以做

n = ~n; 

,並跳過做任何的分離。但是你特別要求字節轉換。

+0

我會在'nbytes =〜nbytes;'行中添加一條註釋,以更清楚地表明該行不會被編譯。 –

+0

是的,我目前正在查找如何在這裏使用刪除線... 結束了只是取代它。感謝評論:) –

+0

爲什麼不'n =〜n;'?如何將'n'分割爲字節然後重新組裝它們會改變什麼? – PetSerAl

0

我是這樣做的。任何建議使它更簡單。

 int n = 100; 
     //Convert decimal to binary 
     string numAsString = Convert.ToString(n, 2); 

     char[] NumAsChar = numAsString.ToCharArray(); 

     Console.WriteLine(numAsString); 
     //Invert bits 
     for (int i = 0; i < numAsString.Length; i++) 
     { 
      if (NumAsChar[i] == '0') 
      { 
       NumAsChar[i] = '1'; 
      } 
      else 
      { 
       NumAsChar[i] = '0'; 
      } 
     } 

     string NewNumAsString = new string(NumAsChar); 
     //Convert inverted binary num to decimal 
     long l = Convert.ToInt64(NewNumAsString, 2); 

     Console.WriteLine(NewNumAsString); 
     Console.WriteLine(l);