2010-03-13 7 views
2

Comment convertir AS3 ByteArray en wchar_t const* filename?Comment faire pour convertir AS3 ByteArray en wchar_t const * filename? (Adobe Alchemy)

Donc, dans mon code C j'ai une fonction en attente d'un fichier avec void fun (wchar_t const* filename) comment envoyer à cette fonction mon ByteArray? (Ou, comment réécrire ma fonction?)

+0

Je ne suis pas vraiment dans ce sujet, mais je suppose que ce lien peut vous fournir un aperçu: http://stackoverflow.com/questions/360353/any-way-to-convert-a-regular-string- in-actionscript-3-to-a-bytearray-of-latin-1-c –

Répondre

3

Une question vieille de quatre mois. Mieux vaut tard que jamais?

Pour convertir un objet ByteArray en une chaîne dans AS3, il existe deux méthodes en fonction du mode de stockage de la chaîne. Premièrement, si vous utilisez writeUTF, il écrira un unsigned short représentant d'abord la longueur de la chaîne, puis écrira les données de la chaîne. La chaîne est la plus facile à récupérer de cette façon. Voici comment faire en AS3:

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

Alternativement, toString travaille également dans ce cas. La deuxième façon de stocker est avec writeUTFBytes. Cela n'écrira pas la longueur au début, donc vous aurez besoin de le suivre de façon indépendante. Il semble que vous souhaitiez que l'intégralité de ByteArray soit une chaîne unique, vous pouvez donc utiliser les length de ByteArray.

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

Puisque vous voulez faire cela avec Alchemy, vous avez juste besoin de convertir le code ci-dessus. Voici une conversion du deuxième exemple:

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")))); 
} 

Cela a une quantité ridicule de fuites de mémoire, bien sûr, puisque je ne suis pas appeler AS3_Release nulle part. J'utilise un wrapper RAII pour AS3_Val dans mon propre code ... pour ma santé mentale. Comme vous devriez

Quoi qu'il en soit, la std::string ma fonction retourne UTF-8 multi-octets. Toute technique C++ standard pour la conversion en caractères larges devrait fonctionner à partir d'ici. (Recherche sur le site pour les retombées sans fin) Je suggère de laisser c'est comme ça, cependant. Je ne vois aucun avantage à utiliser des caractères larges sur cette plate-forme.

+0

RAII wrapper ... hm ... pourriez-vous fournir des liens? – Rella

+0

@Jak: Crée une classe où un constructeur prend un AS3_Val et le stocke. Son constructeur de copie copie l'AS3_Val de l'autre objet et appelle 'AS3_Acquire'. Dans le destructeur, il appelle 'AS3_Release'. C'est la fonctionnalité de base. – Gunslinger47

Questions connexes