unsigned char devicenumber[4]; devicenumber[0]=7; devicenumber[1]=111; devicenumber[2]=218; devicenumber[3]=64; jstring deviceNum = env->NewStringUTF((const char*)devicenumber); return deviceNum;如果这样导致乱码,是编解码不一致导致,先搞清楚c这边是怎么编码的 查看下deviceNum的值来推测不妨参考下这个例子 // Prompt user for a C-string char outCStr[128]; printf("Enter a String: "); scanf("%s", outCStr); // not more than 127 characters
// Step 3: Convert the C-string (char*) into JNI String (jstring) and return return (*env)->NewStringUTF(env, outCStr);
{
// AfxMessageBox("hello",NULL,NULL);
// memcpy((char *)devicenumber,"\x7\x6f\xda\x40\x00\x00",6);
///*
devicenumber[0]=7;
devicenumber[1]=111;
devicenumber[2]=218;
devicenumber[3]=64;
devicenumber[4]=0;// */// unsigned char sn[20],cRet;
// cRet=ReadSN(sn);
// if(!cRet)two_one(sn+5,8,devicenumber);
return devicenumber;}这个原型原本是返回char、return 0;被我改成了char *、我的java代码:
public class TestDll {
public interface CLibrary extends StdCallLibrary {
CLibrary INSTANCE = (CLibrary) Native.loadLibrary("OUR_MIFARE",
CLibrary.class); public String pcdgetdevicenumber(String value); } public static void main(String[] args) {
String value="1";
String b = CLibrary.INSTANCE.pcdgetdevicenumber(value);
System.out.println(b+"-"+value); }}为什么我输出的是“INI~1\AppData\Local\Temp-1”这种玩意。、?
devicenumber[0]=7;
devicenumber[1]=111;
devicenumber[2]=218;
devicenumber[3]=64;
jstring deviceNum = env->NewStringUTF((const char*)devicenumber);
return deviceNum;如果这样导致乱码,是编解码不一致导致,先搞清楚c这边是怎么编码的
查看下deviceNum的值来推测不妨参考下这个例子
// Prompt user for a C-string
char outCStr[128];
printf("Enter a String: ");
scanf("%s", outCStr); // not more than 127 characters
// Step 3: Convert the C-string (char*) into JNI String (jstring) and return
return (*env)->NewStringUTF(env, outCStr);
unsigned char devicenumber[4] = {7,111,218,64};
jstring deviceNum = env->NewStringUTF((const char*)devicenumber);
return deviceNum;C/C++的字符串必须以\0结尾,所以你这里应该修改为const char devicenumber[5] ={7,111,218,64,'\0'};否则产生的字符串会有问题!
--------------------------------------
其次你的java端测试方法有误:
System.out.println(str);
这个str由7,111,218,64这几个字符组成,在ascii码中:
7代表响铃符
111代表小写字母o
218不在ascii内
64代表@符
所以这样打印会显示:oÚ@所以这样打印是不对的!要这样打印:
for(int i = 0 ; i < str.length(); i++){
System.out.println((int)str.charAt(i));
}
你要分清啥是人类可阅读的字符好不