memcpy和memset函数到java

时间:2015-02-12 14:57:56

标签: java c memcpy

我目前正在修改用C编写的DLL到Java,我遇到了memcpy和memset C函数的问题。

这是我要转换的内容(不是整个代码):

    int res = 0;
    int bytes_written = 0;
    int totalsize;
    int reportid;
    hid_device *handle;
    unsigned char trans_data[64];
    unsigned char *buf;

    buf = (*env)->GetByteArrayElements(env, data, NULL);


    memcpy(trans_data+2,buf+bytes_written+2,totalsize);
    memset(trans_data+2+totalsize,0,64-(totalsize+2));   

对于memcpy,我知道有System.arraycopy,但是当以下面的方式使用它时,它不是我期望的那样

        System.arraycopy(trans_data, 2, buff, 2, totalsize);

1 个答案:

答案 0 :(得分:2)

考虑到目标/源参数的顺序在C memcpy和Java arraycopy

中是不同的

C memcpy(b+2, a+1, 2);相当于Java的System.arraycopy(a, 1, b, 2, 2);,它意味着“将数组a中的位置1和2复制到数组b的位置2和3”。

尝试重新排序参数。