Как декодировать содержимое элемента данных Base64 (несжатое) TMX?

Я пытался декодировать содержимое элемента данных Base64 в файле TMX с помощью AS3. Я использую mx.utils.Base64Decoder для декодирования содержимого.

Вот мои данные слоя 1x1 без кодировки (я не уверен, что закодированные данные в формате XML):

<tile gid="1"/>

Вот мой закодированный слой:

AQAAAA==

Когда я пытаюсь декодировать данные, возвращаемое значение пусто. Я попытался декодировать данные с помощью онлайн-декодера Base64, но он также показал пустое значение.


person Community    schedule 28.05.2015    source источник


Ответы (1)


Данные в кодировке base64 являются двоичными, где каждые 8 ​​байтов представляют собой 32-битный беззнаковый глобальный идентификатор тайла с обратным порядком байтов, в вашем случае 1. Следовательно, декодированные данные не могут быть напрямую представлены в виде строки.

Значения байтов данных в вашем случае будут следующими:

1 0 0 0

Поскольку значение ASCII для 1 является управляющим символом, означающим SOH (начало заголовка), а 0 обычно используется для обозначения конца строки, при попытке напечатать это ничего не отобразится. Вместо этого вы должны объединить эти байты в 32-битный глобальный идентификатор плитки без знака, как показано ниже:

unsigned global_tile_id = data[tile_index] |
                          data[tile_index + 1] << 8 |
                          data[tile_index + 2] << 16 |
                          data[tile_index + 3] << 24;

Дополнительные сведения и полный пример кода см. в справочнике по формату TMX:

person Thorbjørn Lindeijer    schedule 28.05.2015