1

私はMySqlとNodejsを使用しています。0 と 1 だけで構成される巨大な文字列を格納する必要があります。(これはマップ グリッドです。0 = 移動可能、1 = 移動できません。)

Ex: 00000000000000000000000000000000000010000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000010000000000 ...

その文字列を取得し、base64 文字列にエンコードして、そのように保存する必要がありますか? 必要なときにデコードしますか?もしそうなら、Nodejs/Javascriptを使ってどうすればいいですか?

ありがとう

4

2 に答える 2

1

格納しているデータは簡単に圧縮されているように見えます。ビルトインの MySql COMPRESS関数を使用してみませんか?

生:

mysql> select length('00000000000000000000000000000000000010000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000010000000000');                                                                                                                                                                                             
332

圧縮あり

mysql> select length(compress('00000000000000000000000000000000000010000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000010000000000'));                                                                                                                                                                                                                                                      
23
于 2013-06-19T19:22:53.550 に答える
0

文字列を保存しないで、バイナリを保存してください。

そのデータをバイナリに変換する方法の例を次に示します。最初からマップ データが文字列として表されないように、再設計できることを願っています。

        static void Main(string[] args)
    {
        const string data =
            "00000000000000000000000000000000000010000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000010000000000";

        var arrayLength = data.Length/8;
        if (data.Length%8 != 0)
            arrayLength++;
        var binaryData = new byte[arrayLength];

        byte nextByte=0;
        var k = -1;
        for (var i = 0; i < data.Length; i++)
        {
            var j = i%8;
            if (j == 0)
            {
                binaryData[++k] = nextByte;
                nextByte = 0;
            }

            var bit = int.Parse(data[i].ToString());
            if(bit==1)
                nextByte |= (byte)(bit << j);
        }
        binaryData[k] = nextByte;
    }
于 2013-06-19T18:13:59.597 に答える