我如何编码1s和0s的字符串进行传输?

Tom*_*ght 2 c# string binary encoding

对于遗传算法应用程序,我使用了大量的二进制字符串.大多数时候,他们确实采取的形式01001010110,以便他们可以交配,变异和"交叉".

然而,对于运输和储存,这似乎是浪费.将此编码为较短字符串的最简单方法是什么?

我猜这是非常微不足道的,但我不知道从哪里开始寻找.

更新:我实际上需要以另一个字符串结束:其中一个传输请求将是GET请求.

Mar*_*ers 8

最简单的是取每个数字并将其视为一点.每组8位可以存储在一个字节中.然后您可以将其作为字节流发送.您还需要存储原始字符串的长度,以便区分"0"和"00".

这是您可以编写从字符串到字节数组的转换的一种方法:

byte[] convertToBytes(string s)
{
    byte[] result = new byte[(s.Length + 7) / 8];

    int i = 0;
    int j = 0;
    foreach (char c in s)
    {
        result[i] <<= 1;
        if (c == '1')
            result[i] |= 1;
        j++;
        if (j == 8)
        {
            i++;
            j = 0;
        }
    }
    return result;
}
Run Code Online (Sandbox Code Playgroud)

扭转操作非常相似.

如果需要将数据作为字符串传输,则可以结果字节数组进行64位编码.

您可能还想考虑将其保留在内存中.这比将其存储为字符串更有效,其中每个数字都存储为2字节字符.您使用的内存大约是存储数据所需内存的16倍.令人沮丧的是,在这种形式下使用起来稍微困难一些,所以如果你有足够的内存,那么你目前正在做的事情可能就好了.