2010-03-13 5 views
2

AS을 (를) 어떻게 wchar_t const* filename (으)로 변환합니까?AS3 ByteArray를 wchar_t const * filename으로 변환하는 방법? (Adobe Alchemy)

그래서 내 C 코드에서 파일을 기다리는 기능이 있습니다 void fun (wchar_t const* filename) 그 함수에 내 ByteArray을 보내는 방법은 무엇입니까? (또는 기능을 어떻게 다시 써야합니까?)

+0

저는이 주제에 정말로 관심이 없지만이 링크를 통해 통찰력을 얻을 수 있다고 생각합니다. http://stackoverflow.com/questions/360353/any-way-to-convert-a- regularular-string- in-actionscript-3-by-a-bytearray-of-latin-1-c –

답변

3

4 개월 된 질문입니다. 안하는 것보다 늦게하는 것이 낫다?

ByteArray를 AS3의 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에서 이것을 수행하려는 경우 위 코드를 변환하면됩니다. 난 아무데도 AS3_Release를 호출 아니에요 이후

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_Val에 대한 RAII 래퍼를 사용합니다 ... 제 정신을 위해서. 너도 마찬가지야.

어쨌든 std::string 내 함수가 반환하는 문자는 UTF-8 멀티 바이트입니다. 넓은 문자로 변환하기위한 표준 C++ 기술은 여기에서 작동합니다. (끝없는 reposts를위한 위치를 찾으십시오) 나는 그것이 그것 같이 떠나는 것이 좋습니다. 나는이 플랫폼에서 와이드 캐릭터를 사용하는 것에 대해 어떤 이점도 생각할 수 없다.

+0

RAII 래퍼 ... 흠 ... 링크를 제공 할 수 있습니까? – Rella

+0

@Jak : 한 생성자가 AS3_Val을 가져 와서 저장하는 클래스를 만듭니다. 복사 생성자는 다른 객체의 AS3_Val을 복사하고 'AS3_Acquire'를 호출합니다. 소멸자에서는 'AS3_Release'를 호출합니다. 그것이 기본 기능입니다. – Gunslinger47

관련 문제