将简单的bruteforcer从C#翻译为C

时间:2017-01-28 17:05:13

标签: c# c brute-force

我正在尝试将a simple bruteforcer从C#转换为C,以便进行一些基准测试。我假设主题的逻辑是合理的,所以我决定翻译这个,但我在C中不太好。这是原始代码:

private static char[] characters =
    new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J' };

// length: The length of the string created by bruteforce
public static void PerformBruteForce(int length) {
    int charactersLength = characters.Length;
    int[] odometer = new int[length];
    long size = (long)Math.Pow(charactersLength, length);

    for (int i = 0; i < size; i++) {
        WriteBruteForce(odometer, characters);
        int position = 0;
        do {
            odometer[position] += 1;
            odometer[position] %= charactersLength;
        } while (odometer[position++] == 0 && position < length);
    }
}

private static void WriteBruteForce(int[] odometer, char[] characters) {
    // Print backwards
    for (int i = odometer.Length - 1; i >= 0; i--) {
        Console.Write(characters[odometer[i]]);
    }
    Console.WriteLine();
}

这是将被翻译的代码:

void WriteBruteForce(int *odometer, char *characters) {
    for (int i = len(*odometer) - 1; i >= 0; i--) {
        puts(characters[odometer[i]]);
    }
}

void PerformBruteForce(char *characters, int maxLength) { // max = maximum length
    int characters_length = len(characters);
    int odometer[maxLength];
    long size = (long)pow(characters_length, maxLength);

    for (int i = 0; i < size; i++) {
        WriteBruteForce(odometer, characters);
        int position = 0;

        do {
            odometer[position]++;
            odometer[position] %= characters_length;
        } while (odometer[position++] == 0 && position < maxLength);
    }
}

但是我遇到了很多错误(实际上是4个,但是它们非常恶化),也许某些代码行甚至都没有翻译过。字符集将传递给PerformBruteForce的第一个参数。

C中技术熟练的人能帮助我解决C代码中的错误并修复它们吗?

错误:

  

code.c:在函数'WriteBruteForce'中:

     

code.c:21:15:警告:隐式声明函数'len'[-Wimplicit-function-declaration]

     

for(int i = len(* odometer) - 1; i&gt; = 0; i--){

     

code.c:21:2:错误:在'for'循环初始化声明中声明非变量'len'

     

for(int i = len(* odometer) - 1; i&gt; = 0; i--){

     

^ ~~

     

code.c:22:8:警告:传递'puts'的参数1使整数指针不带强制转换&gt; [ - Wint-conversion]

     

放(字符[里程表[I]]);

     

在code.c中包含的文件中:1:0:   /usr/include/stdio.h:697:12:注意:预期'const char *'但参数类型为'char'

     

extern int puts(const char * __ s);

0 个答案:

没有答案