0

私は C で Linux のプロジェクトに取り組んでおり、12 バイトの乱数を生成する必要があります。インターネットで検索しましたが、srand またはランダム関数以外は見つかりませんでした。ただし、これらの関数は 32 ビット (4 バイト) の乱数しか生成できません。

12バイトの乱数の生成を探しています。

この機能を提供するLinux上のライブラリを知っている人はいますか?

4

2 に答える 2

6

わかりましたので、最終的に解決策:

unsigned char buf[12];
int i;
srand(time(NULL));
for (i = 0; i < sizeof(buf); i++) {
    buf[i] = rand() % 256;
}

(はい、モジュロを使用しています。均一な分布を気にする場合は、使用しないでください。)

于 2013-02-07T06:12:23.677 に答える
3

12 のランダム バイトが何を意味するのか、なぜそれらが必要なのかを教えてくれませんでした。

random(4)を読んでから、おそらくコードを読む必要があります

unsigned char myrandbytes[12];
FILE* fr = fopen("/dev/urandom", "r");
if (!fr) perror("urandom"), exit(EXIT_FAILURE);
fread(myrandbytes, sizeof(char), 12, fr);
fclose(fr), fr = NULL;

しかし、多くの場合、その回答rand(3)で提案されているように使用するだけで十分です。random(3)またはlrand48(3 )を使用することもできます。私は通常、開始時にシードを付けたり、読んだりすることで十分満足しています。random(3)srandominitstate/dev/urandom

乱数が必要な理由を教えていただけなかったので、これ以上お手伝いできません。

乱数の品質が非常に重要な場合 (強力な暗号化の目的など)、システムとハードウェアに依存し、思ったよりもはるかに難しい可能性があります (ページをもう一度読んでrandom(4)ください)。

于 2013-02-07T06:25:08.623 に答える