如何将函数从Java转换为C?

问题描述 投票:0回答:1

我们被要求在Java中构建一个随机字母库。我做了功课。我们现在被要求用C语写。我用Java中的纳米时代做过。我做了一点研究,我在C中找不到纳米时代。

已经在C中尝试过:(它没有用)

Random SayiOlustur(){
Random this;
this = (Random) malloc(sizeof(struct RANDOM));
char randomly;
int i;
struct timeval before , after;
gettimeofday(&before , NULL);
for (i=1 ; i <= 100 ; i++){
   printf("%d %d %d ",i, i*i, i*i*i);}
gettimeofday(&after , NULL);
printf("%d",Nano(before,after)); 
int random;
double test;
while(true){
    test = Nano(before,after);
    random = (int)test % (int)123.0;
    if((random >= 65 && random <= 90) || (random >= 97 && random <= 122)){
    randomly = (char) random;
    break;
    }}}
int Nano(struct timeval x,struct timeval y){
    double x_ms , y_ms , diff;
    x_ms = (double)x.tv_sec*1000000 + (double)x.tv_usec;
    y_ms = (double)y.tv_sec*1000000 + (double)y.tv_usec;
    diff = (double)y_ms - (double)x_ms;
    return diff;
}

Java代码:(工作)

 private long Now(){
        long now = System.nanoTime();
        return now;
 }
public char Random(){
        char rastgele;
        while(true){
            random = (int)((Now())%123);
            // ASCI
            if((random >= 65 && random <= 90) || (random >= 97 && random <= 122))
                break;
        }
        rastgele = (char) random;
        return rastgele;
    }
public static void main(String[] args) {
        RastgeleKarakter rastgele = new RastgeleKarakter();
        System.out.println("Rastgele Karakter: " + rastgele.Random());
}

日期:

run:
Rastgele Karakter: m \\ Random

日期:

run
Rastgele Karakter: y \\ Random
java c random nanotime
1个回答
1
投票

您正在寻找的Unix系统调用是clock_gettime(),它将为您提供纳秒时间。

也就是说,即使你没有问过,我也会对你的C代码提出一些意见:你会更好地尝试从头开始代码而不是移植java代码。您的系统可能会提供random()调用,这将为您提供比您的方法更干净的随机数。此外,您永远不应该从malloc()转换返回:它返回void *。如果你能避免它,就不要施放 - 这是一个非常糟糕的习惯,只会最终隐藏你的虫子。同样,不要将y_ms和x_ms强制转换为double - 您将它们声明为double。当您更改y_ms和x_ms的声明并忘记更改演员表时,该演员表只会伤害您。

你之前和之后传递给Nano(),这很糟糕。这些是结构,因此您将结构中的所有数据复制到堆栈中。将指针传递给结构要好得多,所以你只需要编写一个指针。

© www.soinside.com 2019 - 2024. All rights reserved.