如何将AS3 ByteArray
转换为wchar_t const* filename
?如何将AS3 ByteArray转换为wchar_t const * filename? (Adobe Alchemy)
所以在我的C代码中,我有一个函数正在等待文件void fun (wchar_t const* filename)
如何发送到该函数我的ByteArray
? (或者,我应该如何重写我的功能?)
如何将AS3 ByteArray
转换为wchar_t const* filename
?如何将AS3 ByteArray转换为wchar_t const * filename? (Adobe Alchemy)
所以在我的C代码中,我有一个函数正在等待文件void fun (wchar_t const* filename)
如何发送到该函数我的ByteArray
? (或者,我应该如何重写我的功能?)
一个四个月大的问题。迟到总比不到好?
要将ByteArray转换为AS3中的字符串,根据字符串的存储方式有两种方法。首先,如果使用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);
既然你想用炼金术来做到这一点,你只需要转换上面的代码。下面是第二个例子中的转换:
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++技术应该从这里开始。 (搜索网站无尽的转贴)我建议离开它是因为它,虽然。我想不出在这个平台上使用宽字符的好处。
RAII包装...嗯......你能提供任何链接吗? – Rella 2010-07-28 11:55:39
@Jak:创建一个类,其中一个构造函数接受一个AS3_Val并存储它。它的拷贝构造函数复制另一个对象的AS3_Val并调用'AS3_Acquire'。在析构函数中调用'AS3_Release'。这是基本的功能性。 – Gunslinger47 2010-07-28 17:27:24
我没有真正进入这个主题,但我想这个链接可能会为您提供一些见解:http://stackoverflow.com/questions/360353/any-way-to-convert-a-regular-string- in-actionscript-3-to-a-bytearray-of-latin-1-c – 2010-03-13 13:35:55