我想将字符串转换为二进制,我尝试了这段代码
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”并且我只想转换为零和一提前谢谢
这是一个例子:
foreach (char c in "Test")
Console.WriteLine(Convert.ToString(c, 2).PadLeft(8, '0'));
我不确定我是否完全理解你的问题,但如果你想将文本转换为二进制,这就是它的完成方式:
public byte[] ToBinary(string stringPassed)
{
System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
return encoding.GetBytes(stringPassed);
}
您需要传递整个字符串,而不是字符串中的字符。
您可以使用:Convert.ToByte(string value, int fromBase)
根据 MSDN :
fromBase 类型:System.Int32 value 中数字的基数,必须是 2、8、10 或 16。
有关更多详细信息,请参阅此链接:Convert.ToByte()
所以你可以得到字节,现在你想输出 0 和 1。
对于单byte b
var sb = new StringBuilder();
for(var i=7;i>=0;i--)
{
sb.Append((b & (1<<i))==0?'0':'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 ;
}