如何將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