gpt4 book ai didi

java - 如何将 Java 函数转换为 C 函数?

转载 作者:行者123 更新时间:2023-11-30 14:40:07 25 4
gpt4 key购买 nike

我们被要求用 Java 构建一个随机字母库。我做了作业。现在要求我们用C 语言编写。我用 Java 中的 nanotime 做到了。我做了一些研究,但在 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

最佳答案

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

也就是说,即使您没有询问,我也会对您的 C 代码提供一些评论:您最好尝试从头开始编码,而不是移植 java 代码。您的系统可能提供 random() 调用,这将为您提供比您的方法更干净的随机数。另外,您永远不应该强制转换 malloc() 的返回值:它返回 void *。如果你能避免的话,就不要施放——这是一个非常坏的习惯,最终只会给你隐藏错误。同样,不要将 y_ms 和 x_ms 转换为 double ——您已将它们声明为 double 。只有当您更改 y_ms 和 x_ms 的声明并且忘记更改 Actor 阵容时,该 Actor 阵容才会伤害您。

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

关于java - 如何将 Java 函数转换为 C 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55679981/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com