我正在尝试生成大量的十六进制数字,并且随机生成数字。阵列的大小范围从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。
答案 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;当然不需要保存在数组中,也不需要将整数转换为十六进制字符。这通常用于直接人类阅读或以人类可读格式文本保存/传递数据。