Я встраиваю уровень в строку C #, используя каждый символ для хранения двух разных элементов. Я использую все 16 бит в каждом символе. Я могу сохранить уровень в текстовом файле и прочитать его обратно без проблем. На это смотреть некрасиво, потому что несколько символов совпадают с чем-то равным нулю. Когда я попытался отправить его в PHP (код ниже), я немедленно повторил полученную строку. На первый взгляд данные были неверны. После проверки битов в каждой строке я увидел, что между двумя строками не должно быть реального отношения, которые должны были быть одинаковыми.
public static void UploadLevel(int userID, string levelData)
{
Debug.Log("LEVEL OUT:");
Scene_Editor.LevelToBinary(levelData);
using (var client = new WebClient())
{
var values = new NameValueCollection();
values["uid"] = userID.ToString();
values["leveldata"] = levelData;
var response = client.UploadValues("http://example.com/uploadlevel.php", values);
var responseString = System.Text.Encoding.UTF32.GetString(response);
Debug.Log("levelData BACK");
Scene_Editor.LevelToBinary(responseString);
}
}
А вот и загрузить uploadlevel.php
<?php
echo $_POST['leveldata'];
?>
Вот очень короткий пример уровня, преобразованного в строку (3 символа — наименьший, и может доходить до 99 символов).
Выровнять: ㄐ
Разбить на двоичные:
0) 0010001011111111 (с этим значением не связано ни одного символа)
1) 0011000100010000 (ㄐ)
2) 0010000001100000 (с этим значением не связано ни одного символа)
Уровень Назад: 询 還
Разбить на двоичные:
0) 1000101111100010 (询)
1) 1001000010000100 (還)
Теперь мне даже не нужно, чтобы это была строка, если я могу сохранить ее в базе данных, получить обратно и преобразовать биты обратно в уровень. Есть идеи? Также я использую .net 4.0.
Задача ещё не решена.
Других решений пока нет …