2013-05-16 2 views
2

Emscripten을 사용하여 C lib를 자바 스크립트 코드로 컴파일했습니다. 그러나 내 Javascript 래퍼 함께 바인딩 할 때 문제가 발생했습니다.어떻게 자바 스크립트에서 Emscripten 입력 배열에 액세스합니까?

나는 이것을 참조로 전달하기 위해 이것을 썼다. 나는 컴파일 된 lib를 통해 액세스 할 수 있었다.

var str_to_heapu8 = function (str) { 
    return allocate(intArrayFromString(str), 'i8', ALLOC_NORMAL); 
} 

그러나 정상적인 자바 스크립트 문자열로 다시 가져 오는 데 문제가 있습니다 ... 반환 값은 빈 문자열입니다.

var heapu8_to_str = function (ptr, len){ 
    var array = new Uint8Array(len); 
    var i = 0; 

    while((ptr+i) < len){ 
     array[i] = getValue(ptr+i, 'i8'); 
     i++; 
    } 

    return intArrayToString(array); 
} 

어떻게 자바 스크립트 문자열로 다시 변환 할 수 있습니다 전자

답변

1

를 이것은 나를 위해 작동 :

var heapu8_to_str = function (ptr, len){ 
    return intArrayToString(HEAPU8.subarray(ptr, ptr+len)); 
}; 
1

버퍼에있는 항목의 크기는 8 바이트 (유형이기 때문이다 i8), 각 항목에 대해 getValue의 포인터 값을 8 씩 증가시켜야합니다. 코드의 행을 다음과 같이 변경하십시오.

array[i] = getValue(ptr+i*8, 'i8'); 
+1

I8는 한 바이트에 해당 8 비트 (바이트가 아님)이다. 따라서 귀하의 증분은 8입니다. – Dreamer

1

Emscripten이 (? 자)이 작업을 수행하는 자바 스크립트 함수를 제공

Pointer_stringify(ptr) 
관련 문제