我使用以下方法从字符串创建位,但现在我正在尝试反向,我无法弄清楚如何做到这一点?
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();
}
我想传入一串位并创建字符串。
答案 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)