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)
             所以我就在上面添加打印语句。但是没有读出来。我不知道怎么回事。
               

解决方案 »

  1.   

    什么意思?是log打了看不到,还是说buffer里就没东西?
      

  2.   

    呵呵, memcpy参数反啦!extern void *memcpy(void *dest, void *src, unsigned int count);你的代码:
    jbyte* bytes = env->GetByteArrayElements(readBuf, NULL);
      if (bytes != NULL) {
      memcpy(bytes, buf, 256);
    把好不容易获得的数据,又重新给冲掉了!
      

  3.   

    memcpy(void _FAR *__dest, const void _FAR *__src,
                                           _SIZE_T __n);
      

  4.   


    改成
    memcpy(buf, bytes, 256);