Как преобразовать AS3 ByteArray в wchar_t const * имя файла? (Adobe Alchemy) - PullRequest
2 голосов
/ 13 марта 2010

Как конвертировать AS3 ByteArray в wchar_t const* filename?

Итак, в моем коде C есть функция, ожидающая файл с void fun (wchar_t const* filename), как отправить в эту функцию мой ByteArray? (Или как мне переписать свою функцию?)

1 Ответ

3 голосов
/ 28 июля 2010

Четырехмесячный вопрос. Лучше поздно, чем никогда?

Чтобы преобразовать ByteArray в строку в AS3, есть два способа, в зависимости от того, как была сохранена строка. Во-первых, если вы используете writeUTF, он сначала запишет unsigned short, представляющий длину строки, а затем запишет строковые данные. Строка проще всего восстановить таким способом. Вот как это делается в AS3:

byteArray.position = 0;
var str:String = byteArray.readUTF();

Кроме того, toString также работает в этом случае. Второй способ хранения - с writeUTFBytes. Это не будет записывать длину в начало, поэтому вам нужно как-то отслеживать ее независимо. Похоже, вы хотите, чтобы весь ByteArray был одной строкой, поэтому вы можете использовать ByteArray length.

byteArray.position = 0;
var str:String = byteArray.readUTFBytes(byteArray.length);

Поскольку вы хотите сделать это с помощью Alchemy, вам просто нужно преобразовать приведенный выше код. Вот преобразование второго примера:

std::string batostr(AS3_Val byteArray) {
    AS3_SetS(byteArray, "position", AS3_Int(0));
    return AS3_StringValue(AS3_CallS("readUTFBytes", byteArray,
        AS3_Array("AS3ValType", AS3_GetS(byteArray, "length")) ));
}

Это, конечно, смешное количество утечек памяти, поскольку я нигде не звоню AS3_Release. Я использую оболочку RAII для AS3_Val в своем собственном коде ... ради моего здравомыслия. Как и вы.

В любом случае, std::string, которую возвращает моя функция, будет многобайтовым UTF-8. Любая стандартная техника C ++ для преобразования в широкие символы должна работать отсюда. (ищите на сайте бесконечные репосты) Я предлагаю оставить все как есть. Я не могу придумать никакого преимущества использования широких символов на этой платформе.

...