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.
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 –