如何从位创建一个字符串?

时间:2009-03-17 21:23:18

标签: 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();
}

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

3 个答案:

答案 0 :(得分:2)

您需要使用 hex 二进制文件吗?如果你使用base-64:

,事情将会更容易(并且更短,更长)
        string s = "abcdefg";
        byte[] bytes = Encoding.UTF8.GetBytes(s);
        string encoded = Convert.ToBase64String(bytes);
        byte[] decoded = Convert.FromBase64String(encoded);
        string s1 = Encoding.UTF8.GetString(decoded);

答案 1 :(得分:2)

您的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;
}

虽然有点讨厌 - 我很肯定你可以让它更有效率。不过,如果它做了你需要的事情......

答案 2 :(得分:1)

Convert :: ToInt64 Method(String,Int32)

MSDN