如何将AS3 ByteArray转换为wchar_t const * filename? (Adobe Alchemy)

时间:2010-03-13 09:30:15

标签: c++ c actionscript-3 adobe alchemy

如何将AS3 ByteArray转换为wchar_t const* filename

所以在我的C代码中,我有一个函数正在等待void fun (wchar_t const* filename)文件如何发送到该函数ByteArray? (或者,我应该如何重新编写我的函数?)

1 个答案:

答案 0 :(得分:3)

一个四个月大的问题。迟到总比没有好?

要将ByteArray转换为AS3中的String,有两种方法取决于String的存储方式。首先,如果你使用writeUTF,它将首先写一个代表字符串长度的unsigned short,然后写出字符串数据。字符串最容易以这种方式恢复。以下是它在AS3中的完成方式:

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

或者,toString在这种情况下也适用。第二种存储方式是使用writeUTFBytes。这不会将长度写入开头,因此您需要以某种方式独立跟踪它。听起来你想要整个ByteArray是一个String,所以你可以使用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。我在自己的代码中使用了AS3_Val的RAII包装器...为了我的理智。你也应该这样。

无论如何,我的函数返回的std::string将是UTF-8多字节。用于转换为宽字符的任何标准C ++技术都应该在这里工作。 (搜索网站上无休止的转发)我建议离开它就像它一样。我想不出在这个平台上使用宽字符有什么好处。