我如何将字符串转换为二进制字符串并再次返回

本文关键字:串并 二进制字符 返回 转换 字符串 | 更新日期: 2023-09-27 18:16:07

我需要将一个字符串转换为它的二进制等效并将其保存在一个字符串中。然后将其返回为等效的ASCII格式

我如何将字符串转换为二进制字符串并再次返回

您可以使用Encoding将字符串编码为逐字节表示,例如UTF-8:

var str = "Out of cheese error";
var bytes = Encoding.UTF8.GetBytes(str);

返回。net字符串对象:

var strAgain = Encoding.UTF8.GetString(bytes);
// str == strAgain

您似乎希望表示为一系列'1''0'字符;我不知道你为什么这样做,但这也是可能的:

var binStr = string.Join("", bytes.Select(b => Convert.ToString(b, 2)));

编码接受一个抽象字符串(从某种意义上说,它们是一系列Unicode码点的不透明表示),并将它们映射到一个具体的字节序列。如果没有编码,字节是没有意义的(同样,因为它们是不透明的)。但是,通过编码,它们可以被转换回字符串。

你似乎把"ASCII"和字符串混淆了;ASCII只是一种编码,它只处理最高128的码位。例如,如果您有一个包含'é'的字符串,则它没有ASCII表示,因此绝对不能使用一系列ASCII字节表示,即使它可以和平地存在于。net string对象中。

请参阅Joel Spolsky的文章。

您可以使用以下函数将其转换为二进制并将其还原:

public static string BinaryToString(string data)
{
    List<Byte> byteList = new List<Byte>();
    for (int i = 0; i < data.Length; i += 8)
    {
        byteList.Add(Convert.ToByte(data.Substring(i, 8), 2));
    }
    return Encoding.ASCII.GetString(byteList.ToArray());
}

和将字符串转换为二进制:

public static string StringToBinary(string data)
{
    StringBuilder sb = new StringBuilder();
    foreach (char c in data.ToCharArray())
    {
        sb.Append(Convert.ToString(c, 2).PadLeft(8, '0'));
    }
    return sb.ToString();
}

希望帮助你。

首先将字符串转换为字节,如我的评论和Cameron的回答中所述;然后迭代,将每个字节转换为8位二进制数(可能使用Convert.ToString,适当填充),然后连接。对于相反的方向,按8个字符分割,运行Convert.ToInt16,建立一个字节数组,然后用GetString转换回字符串。