jbyteArray readBuf=NULL;
static jbyteArray read_bt_printer_native(JNIEnv *env, jobject clazz, int ptr)
{
char buf[256] = {0};
int i=0;
memset(buf, 0, 256);
bt_printer_device_t* devices = (bt_printer_device_t*)ptr;
devices->bt_printer_read(buf, 256); //从串口读数据
//这里能正确buf的数据
readBuf = env->NewByteArray(256); //开辟数组
if (!readBuf) {
LOGE("extractAlbumArt: OutOfMemoryError is thrown.");
}
else {
jbyte* bytes = env->GetByteArrayElements(readBuf, NULL);
if (bytes != NULL) {
memcpy(bytes, buf, 256);
env->ReleaseByteArrayElements(readBuf, bytes, 0);
}
}
//这里我想把readbuf 值给打印出来。但是没有读出来。我不知道怎么回事。
//
// for(i=0;i<100;i++)
// {
// LOGE("readBuf=%x\n",readBuf[i]);
// }
// LOGE("readBuf=%s\n",readBuf);
return readBuf;
}
这是一个JNI的代码:
我出现的问题是:
上层应用程序读数据时有时候显示不完全。(比如数据应该是c8600,应用程序读出来是600)
所以我就在上面添加打印语句。但是没有读出来。我不知道怎么回事。
static jbyteArray read_bt_printer_native(JNIEnv *env, jobject clazz, int ptr)
{
char buf[256] = {0};
int i=0;
memset(buf, 0, 256);
bt_printer_device_t* devices = (bt_printer_device_t*)ptr;
devices->bt_printer_read(buf, 256); //从串口读数据
//这里能正确buf的数据
readBuf = env->NewByteArray(256); //开辟数组
if (!readBuf) {
LOGE("extractAlbumArt: OutOfMemoryError is thrown.");
}
else {
jbyte* bytes = env->GetByteArrayElements(readBuf, NULL);
if (bytes != NULL) {
memcpy(bytes, buf, 256);
env->ReleaseByteArrayElements(readBuf, bytes, 0);
}
}
//这里我想把readbuf 值给打印出来。但是没有读出来。我不知道怎么回事。
//
// for(i=0;i<100;i++)
// {
// LOGE("readBuf=%x\n",readBuf[i]);
// }
// LOGE("readBuf=%s\n",readBuf);
return readBuf;
}
这是一个JNI的代码:
我出现的问题是:
上层应用程序读数据时有时候显示不完全。(比如数据应该是c8600,应用程序读出来是600)
所以我就在上面添加打印语句。但是没有读出来。我不知道怎么回事。
jbyte* bytes = env->GetByteArrayElements(readBuf, NULL);
if (bytes != NULL) {
memcpy(bytes, buf, 256);
把好不容易获得的数据,又重新给冲掉了!
_SIZE_T __n);
改成
memcpy(buf, bytes, 256);