当不是 8 位 char 时,使用零填充将字符串转换为 C# 中的二进制序列

Convert a String to binary sequence in C# with zero padding when not 8 bits of char

我使用我在其中一个问题中看到的方法将 ascii 转换为二进制字符串:

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

但是,如果输入类似于下面的消息,其中包含 'space' 或其他字符:

"Hello, How are you?"

以上方法是构建一个6位或7位的序列。 当我尝试解码长序列(我知道每 8 位是一个字符)时,我遇到了一个大问题,即消息字符的一部分是 6 位或 7 位或 8 位,并且所有内容都混淆了。 我该如何改进它? 谢谢

怎么样

public string GetBits(string input)
{
    return string.Concat(input.Select(x => Convert.ToString(x, 2).PadLeft(8, '0')));
}

你的问题是前导零。如果你想 return 每个字符 8 位,那么你必须添加前导零。我在你的案例中使用了 PadLeft。

public string GetBits(string input)
{
    StringBuilder sb = new StringBuilder();
    foreach (byte b in ASCIIEncoding.UTF8.GetBytes(input))
    {
        sb.Append(Convert.ToString(b, 2).PadLeft(8, '0'));
    }
    return sb.ToString();
}