int get_parameters_count(char* buffer, char* typ, int *at)
{
  char *p1=  strstr(buffer, strcat(typ,"="));
  char *p2=strchr(p1,';');
  int len;
  char s[11];
  *at+=p2-p1+1;
  len=p2-p1-strlen(typ);
  memset(s,0,len+1);
  strncpy(s,p1+strlen(typ),len);
  return atoi(s);
}char *get_parameter_type(char* buffer, char *typ, int *at)
{
  //get location of type er
   char* p1= buffer+*at;
   char* p2= strchr(p1,'=');
   *at+=p2-p1+1;
   memset(typ, 0, p2-p1+1);
   strncpy(typ, p1, p2-p1);
   return typ;
}

PS
:哪位大侠,帮我帮这两个C函数,转成JAVA的方法,谢谢拜托。

解决方案 »

  1.   

    这个是C的吧,跟Java有什么关系
      

  2.   

    我想把他转成JAVA方法啊,我也不懂C语言,所以进来问啊谢谢各位帮我顶下,希望高手能看见,指点一下
      

  3.   

    *at+=p2-p1+1;
    Java中貌似无法做到这样的操作,要么用全局变量传递,要么包装成一个类去做
      

  4.   

    我首先声明下我没搞过C,但是从做的项目中知道用JAVA调用C
    首先定义一个类里面的方法跟C定义的应该一样
    比如说是 public native int open(String device);
    再就是在类中定义static块System.load("文件路经");
    还有就是你哪个方法的参数冒似在java中不能够传递,
    你还是多参考参考一下native的用法
      

  5.   

    晕。。LZ,你要说下,这个C语言实现什么功能的。
      

  6.   

    第一个函数应该是实现这种功能,比如
    buff = “example: heihei=32;others"
    typ = "heihei";
    最后返回32
    并且还有个功能,就是把一个计数器alt增加strlen("heihei=32")那么对应的JAVA代码为:
    int get_parameters_count(String buff, String typ, Integer at)
    {
         String temp = buff.subSequence(buff.indexOf(type+"="));
         String temp2 = temp.subSequence(0,temp.indexOf(";"));
         at.setValue(at + temp2.length());
         return Integer.valueOf(temp2.subSequence(temp2.indexOf("=")+1));
    }记得传进去的alt要为Integer,而不是primitive的int,不然的话就传的是拷贝,而不是引用,无法更新对象。
        第二个函数很诡异,是先取p1之后at个字节的字串,然后返回一个字符串,内容是这个字串从头到第一个等号之间的距离,同时让at这个计数器增加距离
    String get_parameter_type(String buff, String typ, Integer at)
    {
         String temp = buff.subSequence(at);
         String temp2 = temp.subSequence(0,temp.indexOf("="));
         alt.setValue(alt + temp2.length());
         return temp2 ;
    }
    注意:至于传Integer是不是引用,平时没试验过,建议你试验,否则只有包装一个类包含一个int和一个String来做返回值。
    另外,我身边没有IDE和编译环境,是顺手写的,但是意思应该没错
      

  7.   

    这两句在JAVA里面都会报错
    String temp = buff.subSequence(at);
    at.setValue(at + temp2.length());
    不允许这样写
      

  8.   

    用substring代替subSequence就能只输入一个参数at.setValue(at + temp2.length());
    改成
    at.valueOf(at + temp2.length());用个eclipse或查查文档
      

  9.   

    如果在C语言里是地址传参的话,JAVA里该怎么解决
    例如: pname=get_namestring(buffer, &at, &nlen);
      

  10.   

    java里除了int,boolean,float这类primitive类型是值传递外其他的都是引用(指针)传递,比如String,Integer,Float,Boolean,Date等等
      

  11.   

    &at, &nlen);  但是这两个参数定义的时候是 integer类型啊是值传递吧????
      

  12.   

    ANIAO老大,再帮我转一个,谢谢。我是实在搞不懂?
    int get_data_count(char * buffer, int *at)
    {
      char *p1=  buffer+*at;
      char *p2=strchr(p1,';');
      int len=p2-p1;
      char s[11];
      *at+=len+1;
      memset(s,0,len+1);
      strncpy(s,p1,len);
      return atoi(s);
    }谢谢 谢谢
      

  13.   

    int get_parameters_count(char* buffer, char* typ, int *at) 
    C/C++里面的指针变量都可以对应成对象。
    char*转换成string对象,int*转换成Integer对象。int get_data_count(char * buffer, int *at) 

      char *p1=  buffer+*at; 
      char *p2=strchr(p1,';'); 
      int len=p2-p1; 
      char s[11]; 
      *at+=len+1; 
      memset(s,0,len+1); 
      strncpy(s,p1,len); 
      return atoi(s); 
    } char* buffer 转成 string buffer
    int *at转成Integer at
    char *p1=  buffer+*at; 转成 string p1 = buffer + at.toString();char *strchr(char *s,char c);函数
    如果c不在s中,返回NULL,如果在,返回c首次出现的位置,相当于at = s.indexOf(c)void *memset(void *buffer, int c, int count);函数
    把buffer所指内存区域的前count个字节设置成字符c,
    针对上面的语句,相当于string tmp = s.substring(0,count);
    for(int i=0;i<count;i++){
      tmp[i] = c;//这里可能不对,我忘记了
    }
    s = tmp + s.substring(count+1);char *strncpy(char *dest, char *src, int n);函数
    把src所指由NULL结束的字符串的前n个字节复制到dest所指的数组中。
    相当于s = p1.substring(0,len);PS:学C++才2天,有些可能解释不清楚。
      

  14.   

    即使转成Integer也不行的,要么自己封装一个类
      

  15.   

    先写java类,里边声明native方法,再用java h 命令生成c那边的.h头文件,再写该头文件的实现就OK了,貌似你准备倒推。
      

  16.   

    第三个参数不行
    at.setValue
    java.lang.Integer中有这个方法吗?