6

我想将字符串转换为二进制,我尝试了这段代码

byte[] arr = System.Text.Encoding.ASCII.GetBytes(aa[i]);

还有这个

System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
byte[] arr= encoding.GetBytes(aa[i]);

但它返回的数字不是二进制说如果我写'm'它会将其转换为“0109”并且我只想转换为零和一提前谢谢

4

5 回答 5

16

这是一个例子:

foreach (char c in "Test")
    Console.WriteLine(Convert.ToString(c, 2).PadLeft(8, '0'));
于 2013-05-21T00:01:20.050 回答
3

我不确定我是否完全理解你的问题,但如果你想将文本转换为二进制,这就是它的完成方式:

public byte[] ToBinary(string stringPassed)
{
   System.Text.ASCIIEncoding  encoding = new System.Text.ASCIIEncoding();
   return encoding.GetBytes(stringPassed);
}

您需要传递整个字符串,而不是字符串中的字符。

于 2013-05-20T23:30:35.753 回答
1

您可以使用:Convert.ToByte(string value, int fromBase)

根据 MSDN :

fromBase 类型:System.Int32 value 中数字的基数,必须是 2、8、10 或 16。

有关更多详细信息,请参阅此链接:Convert.ToByte()

于 2013-05-20T23:23:57.200 回答
1

所以你可以得到字节,现在你想输出 0 和 1。

对于单byte b

var sb = new StringBuilder();
for(var i=7;i>=0;i--)
{
  sb.Append((b & (1<<i))==0?'0':'1');
}
于 2013-05-21T00:25:34.627 回答
-1

这样的事情应该对你有用;

static string bytes2bin( byte[] bytes )
{
  StringBuilder buffer = new StringBuilder(bytes.Length*8) ;
  foreach ( byte b in bytes )
  {
    buffer.Append(lookup[b]) ;
  }
  string binary = buffer.ToString() ;
  return binary ;
}

static readonly string[] lookup = InitLookup() ;
private static string[] InitLookup()
{
  string[] instance = new string[1+byte.MaxValue] ;
  StringBuilder buffer = new StringBuilder("00000000") ;
  for ( int i = 0 ; i < instance.Length ; ++i )
  {

    buffer[0] = (char)( '0' + ((i>>7)&1) ) ;
    buffer[1] = (char)( '0' + ((i>>6)&1) ) ;
    buffer[2] = (char)( '0' + ((i>>5)&1) ) ;
    buffer[3] = (char)( '0' + ((i>>4)&1) ) ;
    buffer[4] = (char)( '0' + ((i>>3)&1) ) ;
    buffer[5] = (char)( '0' + ((i>>2)&1) ) ;
    buffer[6] = (char)( '0' + ((i>>1)&1) ) ;
    buffer[7] = (char)( '0' + ((i>>0)&1) ) ;

    instance[i] = buffer.ToString() ;
  }
  return instance ;
}
于 2013-05-21T01:05:13.257 回答