生成存储在数组中的160位字符串

时间:2009-11-13 00:00:08

标签: c random bits

我正在尝试生成一个随机的160位字符串,该字符串应该存储在名为str [20]的字符数组中。很明显,该数组包含20个字符。如何将160位更改为20个字符/数字?我正试图在C中这样做..任何帮助都非常感谢,因为我已经没有想法,然后在我的大学帮助台也无法帮助我..

3 个答案:

答案 0 :(得分:1)

这看起来像homwork,所以我只给你基础知识:

您的变量将如下所示:

char str[20];

请注意,此数组将包含字节的数据,不一定是“字符”(字母,数字和标点符号,因为我们通常理解字符“)。

除非分配是关于编写自己的随机生成器,否则您可能希望使用C的运行时伪随机生成器(在stdlib.h中),并使用其两个函数:srand()和{{1 }}。 rand()用于“种子”生成器(具有相同值的种子以获得可重复性,在调试期间有用,或者使用可变数字(通常与系统时间相关))以获得真正的随机数。{{1} }用于生成整数随机值。

因为rand()产生的值介于0和RAND_MAX之间(这是一个“大”数字),您可能需要使用modulo来获得正确的数量。例如

str [0] = char(rand()%256); //或类似的东西。

然而,

rand()不会产生20个字节的整数,所以你需要获得几个rand值并在数组中适当地拟合它们。最直接的可能是调用rand 20次并每次存储1个字节,但也可以一次存储几个字节,使用指向str的部分。

答案 1 :(得分:0)

160位是20个字节,因此可以容纳20个字符串字符。

如果N是包含一行中所有位的数字,则可以编写如下循环:

int i;

for (i=0; i<20; i++) {
  str[i] = (char)(N & 0xFF); 
  N >>= 8;
}

编辑: C确实没有可以保存所有位的数据类型。因此,您需要为包含部分位的每个变量在几个子循环中拆分循环。

另一方面,如果你在运行中一次生成一个位,代码可能看起来像这样(假设你的随机函数被称为“random()”并返回一个0或1的int )

int i, j, b;

for (i=0; i<20; i++)
{
  b = 0;
  for (j=0; j<8; j++)
  {
    b |= (random() & 1);
    b <<= 1;
  }
  str[i] = (char)b;
}

答案 2 :(得分:0)

随机可打印的字符串。如果您不在乎它是否可打印,请删除对min((int)''的调用。注意我使用一个空终止符使它成为一个正确的c字符串,如果你不想这样,只需删除使最后一个字符为空的部分(并且部分taht打印它 - 那将是一个寻找的null终止符。)

#include <stdlib.h>

int main()
{
    char* str[20];
    int i;

    for (i = 0; i < 19; i++)
    {
        char[i] = min((int)' ', rand() % CHAR_MAX);
    }

    char[19] = '\0';

    puts(str);
}