2013-05-20 20 views
5

我想字符串转换为二进制的,我试过这个代码字符串转换为二进制零和一

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” 并且我想转换为零&只有一个 在此先感谢

+0

This [post](http://stackoverflow.com/a/917190/1758149)似乎有你在找什么。它看起来像你有什么将它转换为十六进制。 – RyPope

+0

这看起来像是最近被删除的问题。 –

+0

“二元”究竟意味着什么?原始字符串和'byte []'都是二进制的,就像计算机中的所有内容一样。 –

回答

12

下面是一个例子:

foreach (char c in "Test") 
    Console.WriteLine(Convert.ToString(c, 2).PadLeft(8, '0')); 
1

你可以使用:Convert.ToByte(字符串值,INT fromBase)

根据MSDN:

fromBase 类型:System.Int32 中值数的基础上,必须是2,8,10,或16

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

2

我不知道我完全理解你的的问题,但如果你想将文本转换为二进制,这是它是如何做:

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

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

1

这样你就可以得到字节,现在你要输出0和1。

对于单个byte b

var sb = new StringBuilder(); 
for(var i=7;i>=0;i--) 
{ 
    sb.Append((b & (1<<i))==0?'0':'1'); 
} 
0

像这样的东西应该做的你;

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 ; 
} 
+0

我喜欢缓存查找的想法,但我不认为我可以用8个复制和粘贴的线条来回答一个答案。为什么没有'for'循环在这里? – weston

+0

@weston:呃?在初始化器中没有内部的for-loop,因为从理论上讲,以一些额外的指令为代价,展开循环的速度要快一些。对于CPU使用率或内存效率来说,这并不重要。更重要的是,展开内部循环使代码更容易理解。如果我实际上觉得需要为生产程序做这样的事情,我会用256个字符串表示形式将数组声明与perl和那些代码结合起来。二进制八位字节的字符串表示不可能在不久的将来随时改变。 –

+0

当然循环展开不是你应该自己做的事情。 jit会将其作为基本的优化。 – weston

相关问题