如何在C#中将整数转换为二进制字符串?

Jak*_*les 9 c#

我正在写一个数字转换器.如何在C#中使用内置函数将整数转换为二进制字符串(Convert.ToString根据给定的值做不同的事情)?

  • 二进制 - >符号量级
  • 二进制 - >一个补充
  • 二进制>二进制补码

cas*_*nca 17

今天几乎所有的计算机都在内部使用二进制补码表示,所以如果你做这样的直接转换,你将获得两个补码字符串:

public string Convert(int x) {
  char[] bits = new char[32];
  int i = 0;

  while (x != 0) {
    bits[i++] = (x & 1) == 1 ? '1' : '0';
    x >>= 1;
  }

  Array.Reverse(bits, 0, i);
  return new string(bits);
}
Run Code Online (Sandbox Code Playgroud)

这是剩余两次转换的基础.对于符号幅度,只需事先提取符号并转换绝对值:

byte sign;
if (x < 0) {
  sign = '1';
  x = -x;
} else {
  sign = '0';
}
string magnitude = Convert(x);
Run Code Online (Sandbox Code Playgroud)

对于一个补码,如果数字为负,则减一:

if (x < 0)
  x--;
string onec = Convert(x);
Run Code Online (Sandbox Code Playgroud)


小智 13

简单的说法:

IntToBinValue = Convert.ToString(6, 2);
Run Code Online (Sandbox Code Playgroud)


kbr*_*ton 6

至少部分答案是decimal.GetBits(someValue)用于将小数转换为其二进制表示.

BitConverter.GetBytes反过来,可以使用返回的元素decimal.GetBits()将整数转换为字节.

您可能会发现decimal.GetBits()文档很有用.

不过,我不知道如何从字节到十进制.

更新:根据作者的更新:

BitConverter包含将数字转换为字节的方法,便于获取二进制表示.这些GetBytes()ToInt32()方法便于在每个方向上进行转换.在ToString()重载方便创建十六进制字符串表示,如果你会发现,更容易解释为1和0.


小智 5

   var a = Convert.ToString(4, 2).PadLeft(8, '0');
Run Code Online (Sandbox Code Playgroud)