最近這幾天做了一個兼職 ,主要是把C語言以及C#語言封裝的dll,經過C++中轉為Java語言支持的,主要其中的問題就是類型轉換,在此列出常用類型的轉換過程。
1 #include "stdafx.h" 2 #include <cstdlib> 3 #include <cstdio> 4 #include <iostream> 5 #include "www_cnblogs_com\cyjwdm0503.h" 6 #include <malloc.h> 7 #include <Windows.h> 8 9 using namespace std; 10 using namespace System::Runtime::InteropServices; 11 using namespace System; 12 13 //char* ->c# 14 System::String^ charptrtoCstring( const char* str ) 15 { 16 System::String^ str1 = Marshal::PtrToStringAnsi((IntPtr)(char*)str); 17 return str1; 18 } 19 20 21 //C#->char* 22 char* Cstringtocharptr( System::String^ s ) 23 { 24 char* buffer = (char*)(void*)Marshal::StringToHGlobalAnsi(s); 25 return buffer; 26 } 27 28 29 //jstring ->char* 30 char* jstringTocharptr( JNIEnv *env, jstring jstr ) 31 { //UTF8/16轉換成gb2312 32 int length = (env)->GetStringLength(jstr ); 33 const jchar* jcstr = (env)->GetStringChars(jstr, 0 ); 34 char* rtn = (char*)malloc( length*2+1 ); 35 int size = 0; 36 size = WideCharToMultiByte( CP_ACP, 0, (LPCWSTR)jcstr, length, rtn,(length*2+1), NULL, NULL ); 37 if( size <= 0 ) 38 return NULL; 39 (env)->ReleaseStringChars(jstr, jcstr ); 40 rtn[size] = 0; 41 return rtn; 42 } 43 44 //char* ->jstring 45 jstring charptrTojstring( JNIEnv* env, const char* str ) 46 {//gb2312轉換成utf8/16 47 jstring rtn = 0; 48 int slen = strlen(str); 49 unsigned short * buffer = 0; 50 if( slen == 0 ) 51 rtn = (env)->NewStringUTF(str ); 52 else 53 { 54 int length = MultiByteToWideChar( CP_ACP, 0, (LPCSTR)str, slen, NULL, 0 ); 55 buffer = (unsigned short *)malloc( length*2 + 1 ); 56 if( MultiByteToWideChar( CP_ACP, 0, (LPCSTR)str, slen, (LPWSTR)buffer, length ) >0 ) 57 rtn = (env)->NewString( (jchar*)buffer, length ); 58 } 59 if( buffer ) 60 free( buffer ); 61 return rtn; 62 } 63 64 //jchar ->char 65 char jchartochar( jchar c ) 66 { 67 char ch = (char)(c & 0x00ff); 68 return ch; 69 } 70 71 //char* ->jchar 72 jchar charTojchar( char c ) 73 { 74 jchar ch = (jchar)(c | 0xff00); 75 return ch; 76 } 77 78 //char ->C# 79 System::Char chartoChar( char c ) 80 { 81 System::Char C = (System::Char)((int)(c)); 82 return C; 83 } 84 85 //C#->char 86 char Chartochar( System::Char c ) 87 { 88 char C = (char)((int)(c)); 89 return C; 90 }