2016-08-13 119 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); 
相关问题