android项目中JNI调用的C代码

最近的一个项目,需要通过JNI在串口中读取数据,读取数据并返回的代码是用C语言写的。我对C语言很陌生,哪位大神帮帮忙,帮忙撸几句代码。
JNIEXPORT jbyteArray JNICALL Java_com_cem_serialdevdemo_CodeJNI_ReadRfidSerialPort
(JNIEnv env, jobject obj)
{
//大致的思路是:
int rev=0;
unsigned char sof;
unsigned char buf[20];
rev=read(s_fdRfid,&sof,1)
//判断读取到数据时:
//判断读取到的数据与通信协议的格式是否相同
//首先判断前三个字节与通信协议的前三个识别码是否相同
//再判断末尾两个字节与通信协议的后两个识别码是否相同
//再取出中间的四个字节,转换为jbyteArray后返回
//未读到数据或者数据格式不对时:返回"0"
char *fail="0";
jbyteArray byteArray = (*env)->NewByteArray(env, 1/*strlen(cp)
/);
(*env)->SetByteArrayRegion(env, byteArray, 0, 1/*strlen(cp)*/, (jbyte *)fail);
return byteArray;图片说明
}

学习网站:

系统的学习网站:http://helloxuweifu.iteye.com/blog/1168647
http://www.chinavideo.org/viewthread.php?tid=10870
http://blog.csdn.net/bigapple88/article/details/6756204......
答案就在这里:android中如何通过jni调用c,c++代码
----------------------Hi,地球人,我是问答机器人小S,上面的内容就是我狂拽酷炫叼炸天的答案,除了赞同,你还有别的选择吗?

主要还是read()的用法,三个参数,分别是从哪里读,读到哪里,读多少
满足你第一个要求就是if(read(s_fdRfid,&buf[0],1))进去就是读到了,因为read返回实际读到的数据,前提是不管你s_fdRfid是这个句柄是否可以存在且读到东西。后面的就是加加减减的事啦,buf[0]buf[1].....

read返回实际读到的数据数

您好,我看了下之前同事写好的程序,read()返回的不是读到的数据,而是如果读到数据,则返回1,
我这样写,同事说不是很好!

int rev=0,len=0;
unsigned char buf[20];
unsigned char sof;
char *fail="0";

//读取数据
rev=read(s_fdRfid,&sof,1);
        if (rev==1 && sof==0xFF) {
            rev=read(s_fdRfid,&sof,1);
            if (rev==1 && sof==0x03) {
                rev=read(s_fdRfid,&sof,1);
                if (rev==1 && sof==0x04) {
                    for(len=0;len<4;len++){
                        rev=read(s_fdRfid,&sof,1);
                    buf[len]=sof;
                    }
                    rev=read(s_fdRfid,&sof,1);
                    if (rev==1 && sof==0x00) {
                        rev=read(s_fdRfid,&sof,1);
                        if (rev==1 && sof==0x00) {
                            jbyteArray byteArray = (*env)->NewByteArray(env, len);
                            (*env)->SetByteArrayRegion(env, byteArray, 0, len, (jbyte *)buf);
                            return byteArray;
                        }else{
                            //失败时返回"0"
                            jbyteArray byteArray = (*env)->NewByteArray(env, 1/*strlen(cp)*/);
                            (*env)->SetByteArrayRegion(env, byteArray, 0, 1/*strlen(cp)*/, (jbyte *)fail);
                            return byteArray;
                        }
                    }
                }
            }
        }

        能指点一下吗?