如何从十进制转换为二进制,用~反转,并转换回十进制

本文关键字:转换 十进制 反转 二进制 | 更新日期: 2023-09-27 18:02:20

不确定我是否在正确的方向。我找不到关于波浪的信息。

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);

如何从十进制转换为二进制,用~反转,并转换回十进制

你可能在寻找一个简单的答案。

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);

编辑:你实际上不能在字节[]上做~。你可以选择

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

或者根本不使用字节数组

为清楚起见,请注意您可以只执行

n = ~n;

并跳过任何分离操作。但是你特别要求进行字节转换

使用这两个方法

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)

我是这样做的。有什么建议可以让它更简单吗?

        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);