我正在尝试将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的人都会感激不尽(甚至更多)。 感谢
答案 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);