2

如何将 AS3 转换ByteArraywchar_t const* filename?

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

4

1 回答 1

3

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

在 AS3 中将 ByteArray 转换为 String 有两种方法,具体取决于 String 的存储方式。首先,如果你使用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++ 技术都应该从这里开始工作。(在网站上搜索无休止的转贴)不过,我建议保持原样。我想不出在这个平台上使用宽字符有什么好处。

于 2010-07-28T05:57:37.467 回答