在Java中转换数组的指针

时间:2011-02-04 12:11:08

标签: java c binary bytearray

我正在尝试将c中的程序转换为Java。 我不知道c编程,我想了解一下btw。

我在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 :(得分:0)

比较字符串和字节数组,您可以使用Arrays.equals()

就rfind而言,你可以使用lastIndexOf()http://forums.devshed.com/java-help-9/the-equivanent-of-rfind-in-java-603139.html

答案 1 :(得分: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);