2011-02-04 69 views
0

我試圖將c中的程序轉換爲Java。 我不知道c編程,我想了解一下btw。在Java中轉換數組的指針

好,我已經得到了這些功能在C:

static int memcmp(Byte *a, Byte *b, int len) { 
    int i; 
    for (i = 0; i < len; i++) 
     if (a[i] != b[i]) 
      return 0; 
    return 1; 
} 

static int rfind(Byte *data, int pos, int leng) { 
    int i; 
    for (i = pos - leng; i > -1; i--) 
     if (memcmp(data+i, data+pos, leng)) 
      return i; 
    return pos; 
} 

,我不能鍛鍊。 看來,函數memcmp比較兩塊內存。 當我得到的數據的大小:

printf("size %d \n", sizeof(data)); 

我8的結果,而一部開拓創新的大小可以32或40(約三分任何好的文檔歡迎)。

任何人誰可以幫我翻譯這個位Java將有我所有的感激之情(甚至更多)。 感謝

回答

0

Java沒有指針,所以你不能直接將代碼轉換。在C中,可以將指針當作數組來處理,而在Java中,您需要將索引用於同一個數組中。這是或多或少直接翻譯,我可以想出:

public int rfind(byte[] data, int pos, int len) { 
    for (int i = pos - len; i > -1; i--) { 
     if (memcmp(data, i, pos, len)) { 
      return i; 
     } 
    } 
    return pos; 
} 

public boolean memcmp(byte[] data, int idx1, int idx2, int len) { 
    for (int i = idx1; i <= len; i++) { 
     if (data[i] != data[idx2 + i]) { 
      return false; 
     } 
    } 
    return true; 
} 

編輯

由於AYUSH指出,如果data陣列是ASCII字符串,就可以得到同樣的結果以一種非常簡單的方式使用庫調用。

String str = new String(data); // convert data byte array to String 
String sub = str.substring(pos, len); // substring pointed to by pos 
int rfindResult = str.lastIndexOf(sub); 
+0

我認爲對於memcmp來說,給兩個數組而不是隻有一個會更有用。 – 2011-02-04 14:14:39