c# - 如何从位创建字符串?

标签 c#

我使用以下方法从字符串中创建位,但现在我正在尝试执行相反的操作,但我不知道该怎么做?

public string GetBits(string input)
{
    StringBuilder sb = new StringBuilder();
    foreach (byte b in Encoding.Unicode.GetBytes(input))
    {
        sb.Append(Convert.ToString(b, 2));
    }

    return sb.ToString();
}

我想传入位串并创建字符串。

最佳答案

您的 GetBits 方法无法正常工作 - 它不会为每个字节转换 8 位。

作为粗略的修复,您可以使用 PadLeft。这是完整的解决方案:

// Fixed version of GetBits, with padding.
public static string GetBits(string input)
{
    StringBuilder sb = new StringBuilder();
    foreach (byte b in Encoding.Unicode.GetBytes(input))
    {
        string lowBits = Convert.ToString(b, 2);
        string eightBits = lowBits.PadLeft(8, '0');
        sb.Append(eightBits);
    }
    return sb.ToString();
}

public static string UnicodeBitsToString(string input)
{
    return Encoding.Unicode.GetString(ParseHex(input));
}

public static byte[] ParseHex(string input)
{
    byte[] ret = new byte[input.Length/8];
    for (int i=0; i < input.Length; i += 8)
    {
        ret[i/8] = Convert.ToByte(input.Substring(i, 8), 2);
    }
    return ret;
}

不过这有点令人讨厌 - 我相信您可以提高它的效率。尽管如此,如果它完成了您需要它做的...

关于c# - 如何从位创建字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/656072/

相关文章:

c# - linq group by with join

c# - 在 C# 中执行并发任务

c# - 计时器在 60 秒后重置

c# - 代码量是否会使数据结构变大?

c# - 我如何解析一个dtd文件

c# - 抛出新异常未被 Server.GetLastError() 捕获

c# - NHibernate:在集合上调用 .RemoveAll

c# - 从 ASP.NET MVC Lambda 表达式中获取值

c# - 如何使用 Ssl Stream 获取/存储客户端证书?

c# - 添加鼠标点击事件到面板