【问题标题】:convert list<char> that represent binary string into ASCII C#将表示二进制字符串的 list<char> 转换为 ASCII C#
【发布时间】:2015-08-03 00:06:24
【问题描述】:

我有一个代表二进制字符串的字符列表。

List<char> myCharList = new List<char>();

例如charList中保存的是ascii H,用二进制序列表示:01001000

我尝试将此列表转换为 ASCII,以便在文本块中显示它。

谢谢

【问题讨论】:

  • 看起来很可疑...您确定不想将 List&lt;char&gt; 转换为 string 吗?
  • 您在寻找String MyString = new String(myCharList.ToArray());吗?
  • @ZoharPeled hes myCharList 包含 ASCII 字符的二进制表示,而不是实际字符。我认为他想获得char 而不是string...
  • 我认为 xanatos 是对的。它的腥味。
  • @AndreiV: AFAIK,char 就是char,无论您选择如何表示它。如果列表的类型为char,则可以按照我在评论中所写的方式将其表示为字符串。

标签: c# list char ascii


【解决方案1】:

试试这个

string binary = "01001000";
string result =  Encoding.ASCII.GetString(binary.SplitByLength(8).Select(x => Convert.ToByte(x, 2)).ToArray());

更新: 按长度分割:

public static IEnumerable<string> SplitByLength(this string str, int maxLength)
{
    for (int index = 0; index < str.Length; index += maxLength)
    {
        yield return str.Substring(index, Math.Min(maxLength, str.Length - index));
    }
}

【讨论】:

  • 反正List&lt;char&gt; myCharList = new List&lt;char&gt;(); 不是二进制字符串
【解决方案2】:

另一种没有 linq 的方法

string binary = "01001000";
var list = new List<Byte>();
for (int i = 0; i < binary.Length; i += 8)
{
    if (binary.Length >= i + 8)
    {
        String t = binary.Substring(i, 8);
        list.Add(Convert.ToByte(t, 2));
    }
}
string result = Encoding.ASCII.GetString(list.ToArray()); // H

【讨论】:

  • linq 是绝对不适合这个的!你应该在一行代码中做到这一点: int t = 0; for (int i = 0; i
  • @FabianStern 如果你有多个像string binary = "0100100001001000"; //HH 这样的字符,你的答案会一团糟。
  • 给出的是一个列表,表示为“H”。我认为 list 将可用于每个单个字符表示。不过我会修改我的答案
【解决方案3】:

这应该给你一个 ASCII 二进制字符串的字节表示:

static void Main(string[] args)
{
    List<char> chars = new List<char> {'1', '0', '0', '0', '0','0','1'};
    chars.Reverse();
    int t = 0;
    for (int i = 0; i < chars.Count; i++)
    {
        if (chars[i] == '1') t += (int)Math.Pow(2, i);
    }
    Console.WriteLine("{0} represents {1}",t,(char)t );
    Console.Read();
}

这应该给你字节的 ASCII 表示。 请记住,在每个系统上,字符的大小可能不同,所以 此代码将使用系统默认大小作为字符:

static void Main(string[] args)
{

    List<char> chars = new List<char> {'A', 'E', 'L', 'L', 'O'};
    foreach (var c in chars)
    {
        string s = "";
        for (int i = 0; i < (sizeof(char) * 8); i++)
        {
            s = (1 & ((byte)c >> i)) + s;
        }
        Console.WriteLine("{0} represents {1}",c,s );
    }
    Console.Read();
}

【讨论】:

  • 在这里您的解决方案为单行char result = (char)binary.Reverse().Select((x, index) =&gt; x == '1' ? (int)Math.Pow(2, index) : 0).Sum();
猜你喜欢
  • 2014-06-14
  • 2020-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-30
相关资源
最近更新 更多