gpt4 book ai didi

c++ - 如何将 AS3 ByteArray 转换为 wchar_t const* 文件名? (土坯炼金术)

转载 作者:搜寻专家 更新时间:2023-10-31 02:00:06 26 4
gpt4 key购买 nike

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

所以在我的 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);

既然要用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++ 技术都应该从这里开始工作。 (在网站上搜索无穷无尽的转发)不过,我建议保持原样。我想不出在这个平台上使用宽字符有什么好处。

关于c++ - 如何将 AS3 ByteArray 转换为 wchar_t const* 文件名? (土坯炼金术),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2437858/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com