生成大小超过8 MB的十六进制数

时间:2014-01-31 19:58:06

标签: c arrays pointers

我正在尝试生成大量的十六进制数字,并且随机生成数字。阵列的大小范围从8 Mb到40 Mb。我应该在C中实现它。我知道我应该使用malloc来创建一个大型数组,但是无法弄清楚如何生成随机十六进制数并将其放入数组中。另一个限制是在每个十六进制数之前应该有一个“0x”。如果我用这个

  str[i] = hex_digits[ ( rand() % 16 ) ];

我可以生成一个十六进制数字,但它前面没有0x。我不知道如何使用指针。我不擅长编程。任何人都可以指导我这个.. !!

为了说清楚,我在C中的AES实现中将此数组作为输入。在我的代码中,有10个十六进制数作为输入,但我必须尝试使用​​大输入,如8 MB,16 MB,32 MB和64 MB。

我尝试做一些代码并开始在简单数组上实现。代码如下:

   #include <stdio.h>
   void main()
   {
     char a[10];
     int i,j,k;
     for(i=0;i<2;i++)
     {
       j=4*i;
       printf("%d\n",i);
       printf("%d\n",j);
       {
         a[j]='0';
         a[j+1]='x';
         a[j+2]='a';
         a[j+3]='2';
       }
     }
      for(k=0;k<8;k++)
       {
        printf("%s\n",&a[k]);
       }
     }

我认为如果它可行,我可以使它成为大阵列。我试图在数组中放两次“0xa2”,而不是我得到以下输出。

0xa20xa2 xa20xa2 a20xa2 0xa2 XA2 a2 2

感谢任何帮助。

提前致谢,

Raghu。

1 个答案:

答案 0 :(得分:0)

以通常的方式创建随机数。打印时,预先挂起&#34; 0x&#34;。

#include <stdio.h>
#include <stlib.h>
#include <time.h>

void RandPrint(size_t n) {
  unsigned char *BigArray = malloc(n);
  if (BigArray != NULL) {

    // Add this line to vary the random numbers generated.
    // This is a simple method, better ones exist.
    srand(time());

    for (size_t i = 0; i < n; i++) {
      BigArray[i] = rand();
    }

    // If code needs to output the numbers, then print 
    for (size_t i = 0; i < n; i++) {
      printf("0x%02X ", BigArray[i]);
    }

    // If code needs to call an AES encryption routine
    AES_encryption(BigArray, n);
    // Not clear on what OP wants to do after encryption.

    free(BigArray);
  }
}

//Examples
RandPrint(10);
RandPrint(8L*1024*1024);

建议&#34; 0x&#34;当然不需要保存在数组中,也不需要将整数转换为十六进制字符。这通常用于直接人类阅读或以人类可读格式文本保存/传递数据。