当不是 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();
}
我使用我在其中一个问题中看到的方法将 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();
}