конвертировать указатель массива в Java - PullRequest
0 голосов
/ 04 февраля 2011

Я пытаюсь конвертировать программу на c в Java.Я не знаю c программирования, я хотел бы понять немного между прочим.

хорошо, у меня есть те функции в 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 буду вся моя благодарность (и даже больше).Спасибо

Ответы [ 2 ]

0 голосов
/ 04 февраля 2011

В 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;
}

EDIT

Как указывает 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 голосов
/ 04 февраля 2011

для сравнения строки и байтового массива вы можете использовать Arrays.equals().

. Насколько rfind идет, вы можете использовать lastIndexOf () http://forums.devshed.com/java-help-9/the-equivanent-of-rfind-in-java-603139.html

...