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

本文关键字:char 8位 填充 字符串 转换 二进制 | 更新日期: 2023-09-27 17:52:48

我使用我在其中一个问题中看到的这种方法将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位,一切都混在一起。我该如何改进它?由于

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

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

你的问题是前导零。如果您想为每个字符返回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();
}