2

AS3ByteArrayをに変換する方法はwchar_t const* filename

したがって、私のCコードには、void fun (wchar_t const* filename)その関数に送信する方法を含むファイルを待機している関数がありByteArrayます。(または、関数をどのように書き直す必要がありますか?)

4

1 に答える 1

3

生後4か月の質問。遅くなるよりはましですか?

AS3でByteArrayを文字列に変換するには、文字列の保存方法に応じて2つの方法があります。まず、使用する場合は、最初に文字列の長さを表すwriteUTFものを書き込みunsigned short、次に文字列データを書き出します。文字列は、この方法で復元するのが最も簡単です。AS3での実行方法は次のとおりです。

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

または、toStringこの場合も機能します。保存する2番目の方法はを使用することwriteUTFBytesです。これは最初に長さを書き込まないので、何らかの方法で独立して追跡する必要があります。ByteArray全体を単一の文字列にしたいようですので、ByteArrayのを使用できますlength

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

Alchemyでこれを実行したいので、上記のコードを変換する必要があります。2番目の例の変換は次のとおりです。

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どこにも電話をかけていないので、これにはばかげた量のメモリリークがあります。AS3_Val私は自分のコードでRAIIラッパーを使用しています...私の正気のために。あなたもそうすべきです。

とにかく、std::string私の関数が返すのはUTF-8マルチバイトになります。ワイド文字に変換するための標準のC++手法は、ここから機能するはずです。(サイトで無限の再投稿を検索してください)ただし、そのままにしておくことをお勧めします。このプラットフォームでワイド文字を使用することの利点は考えられません。

于 2010-07-28T05:57:37.467 に答える