본문 바로가기

Technical Docs/Android

NDK Jstring to string (char *) 문자열 변경

JString to C++ string

NDK 를 사용할 때 Java에서 Argu를 통해 String 형식을 보내줘야 할 때가 있음

 

Java 파일에서 Native 함수 호출

 

그러면 해당 string을 받는쪽에서 다른 변수(int ...) 같은 경우에는 jint 형으로 받아서 처리가 가능함

그런데 String 같은 경우에는 C++ 에서 재사용하는 경우 Jstring 에서 C++ String 형으로 변환을

해줘야 정상적으로 사용이 가능함

 

Java에서 사용하는 String은 16비트의 Unicode 문자세트를 사용하고, C, C++ 에서는 일반적으로 8bit 의 문자열을 표현하기 때문에 이것을 변환시키기 위해서 UTF-8 포맷으로 변경을 해주는 작업이 필요

 

Jstring 을 C++ 맞게 변환

 

위와같이 함수의 선언에서 받을 때는 JString으로 정상적으로 받지만,

실제로 C++에서 사용할 때는 위와 같이 GetStringUTFChars 를 통해 받아와야함

해당 함수는 변수 선언에서도 Char* 형식으로 받는것처럼 문자열에 대한 포인터를 얻을 때 사용함

*해당 함수의 두번 째 인가 isCopy는 복사본을 만들지 여부를 나타냄