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();
}
我发现这个函数在线将字符串转换为二进制。我该怎么做呢?
例如,使用上面给出的函数将单词“hello”转换为二进制,然后将生成的二进制字符串转换回原始单词/字符串?
我正在尝试在C#中执行此操作,并且我想要转换回来的输入是上面函数给出的字符串
答案 0 :(得分:1)
主要问题是输入功能错误 如果传递字符串“Hello”,则返回的字符串为
"10010001100101110110011011001101111" (35 characters ??? )
但这不是单词Hello
的二进制中的正确表示,其中每个字符应由一系列8 0 | 1(总共40个字符)表示
此错误的主要原因在于Convert.ToString
将传递给转换的字节中的前导零除去。
所以字母H
应为01001000
(8个字符),但转换返回1001000
(7个字符),因此后面的所有内容都是错误的,无法正确转换回来。
您可以使用
修复输入功能string GetBits(string input)
{
StringBuilder sb = new StringBuilder();
foreach (byte b in Encoding.UTF8.GetBytes(input))
{
string temp = Convert.ToString(b, 2);
// This ensure that 8 chars represent the 8bits
temp = "00000000".Substring(temp.Length) + temp;
sb.Append(temp);
}
return sb.ToString();
}
转换回“Hello”时可以写为
string GetString(string input)
{
// Probably a checking on the input length as multiple of 8
// should be added here....
StringBuilder sb = new StringBuilder();
while (input.Length > 0)
{
string block = input.Substring(0, 8);
input = input.Substring(8);
int value = 0;
foreach (int x in block)
{
int temp = x - 48;
value = (value << 1) | temp;
}
sb.Append(Convert.ToChar(value));
}
return sb.ToString();
}