c语言 随机生成一个32位的16进制数的代码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言 随机生成一个32位的16进制数的代码相关的知识,希望对你有一定的参考价值。

如题,随机生成一个32位的16进制数的代码,在线等

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
int main (int argc, char *argv[])

    int result;
    
    /* 设置随机种子为当前时间值*/
    srand((unsigned)time(NULL));
    /* 获得随机数 */
    result = rand();
    /* 以16进制打印输出 */
    printf("result: %#X\\n", result);
    
    return 0;

追问

位数不够啊只有6位数,要不帮忙加个循环然后在输出,比如每次4位,分8次,然后一起输出,编程实在不在行。拜托拜托

追答

//你所说的不是以16进制输出,而是以二进制输出,可以改成下面这样:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
void print_hex(unsigned data)

    int i;
    for (i=31;i>=0;i--) 
        printf("%c", (data&(1<<i))?'1':'0');
    
    printf("\\n");

int main (int argc, char *argv[])

    int result;
     
    /* 设置随机种子为当前时间值*/
    srand((unsigned)time(NULL));
    /* 获得随机数 */
    result = rand();
    /* 以16进制打印输出 */
    /* printf("result: %#X\\n", result); */
    print_hex(result);
return 0;

追问

额,不是,就是16进制的数字。我知道浮点存不了这么大的的数字,我只是要随机的32位数,每位都是从0~F
如 :00112233445566778899AABBCCDDEEFF
麻烦了,我多追加点分

追答

哦,你所说的不是32位数,是32*4=128位数,这是大数据处理。你可以这样做,用4个int的数放在一个数组里面凑成一个128位数,然后用上面提到rand()函数分别生成这4个int数,然后再打印出来即可,反正你需要的只是一个随机数

参考技术A #include <stdio.h>
#include <stdlib.h>
#include <time.h>
void rand32h(char d[32])

    int result;
unsigned char i,n3;
      
    srand( (unsigned)time( NULL ) ); //设置随机数种子
//要点:rand()给出的随机数为15位, 
//      要想得到更多位, 采用拼接的方法。
//      每次用其中12位得到3个十六进制数

for (n3=i=0;i<32;)

if (n3==0) result = rand(); n3=3;
d[i++]=result&15;  
result>>=4; --n3;



void print_hex(char *d, int n)

const char hextable[]="0123456789ABCDEF";
while(n--) putchar(hextable[*d++&15]);


void main()

char d[32];  //用来存储32个16进制随机数
rand32h(d);       //产生随机数
print_hex(d,32);  //显示随机数
putchar('\\n');

追问

谢谢,这个是个好主意,但是我看见的晚了

参考技术B //#include "stdafx.h"//vc++6.0加上这一行.
#include "stdio.h"
#include "string.h"
#include "time.h"
#include "stdlib.h"
int main(void)
    char arry[33]="",i;
    srand((unsigned)time(NULL));
    for(i=0;i<32;i++)
        if((arry[i]=rand()%16)<10) arry[i]+='0';
        else arry[i]+=0x37;
    
    printf("The hexadecimal integer is %s\\n",arry);
    return 0;

追问

谢谢,目前看到的最简洁的了,看见的晚了,实在对不住。

追答

简洁不简洁并不很重要,关键是你采纳的答案是否能达到你所要求的目标。我看了一下未必!

参考技术C # include <stdio.h>
# include <time.h>
int main ( )

char r[33];
int i;
srand(time(NULL));
for (i=0;i<32;i++)
r[i]=rand()%16; // gen 0-15, convert to 0-9,a-f
if (r[i]>=10) r[i]=r[i]+'a'-10; else r[i]=r[i]+'0';

r[32]='\0';
printf("rand values is: %s",r);
return 0;
追问

谢谢,看见的晚了。不过有语法错误。我没检查出再哪儿、

追答

没有错误。我用MS VC++ 6.0 有试了一下。
这个方法概念清楚,易理解。
随机产生32个16进制数,就是一个32位16进制数。
16进制数的字符形式: 用 r[i]=rand()%16,得到0-15,
r[i] 大于等于10 用 'a' 到 'f' 表示 : r[i] - 10 + 'a'
r[i] 小于10 用 '0' 到 '9' 表示 : r[i] + '0'

[gcc &c语言] 随机生成8位的数字字母组合

用gcc(我现在linux,gcc最好啦)或c语言编写一段程序代码

用于随机生成一个(多个更好啦)8位(或自定义位数)的数字与字母组合,并保存文件输出

初学致用,还望顺便解释一下各语句的含义。

前辈们请帮忙看看,分少了点,不诚敬意
---本人长期在线---

复制粘贴的死远点,前辈4楼以上的不用看了,你们直接答就是

4楼的前辈,编译我也通过了,但……

hp@hp-desktop:~$ gedit password.c
hp@hp-desktop:~$ gcc password.c -o password
hp@hp-desktop:~$ ./password
段错误 (core dumped)
hp@hp-desktop:~$

en,对,的确是要参数;能否输出多个?能否用汉字?做个错误处理 ?我实在是太菜了……

我还有几个问题,等会一块儿再开问题问了吧……

程序有一个参数,表示生成的密码的长度
运行的时候要加上,比如./password 8
我写的很简单,参数没做检查,你应该自己去完善一下。
#include <stdlib.h>
#include <string.h>
#include <stdio.h>

void generate(int len,char* buffer)

/*产生密码用的字符串*/
static const char string[]= "0123456789abcdefghiljklnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
int i = 0;
for(; i < len; i++)

buffer[i] = string[rand()%strlen(string)]; /*产生随机数*/



int main(int argc, char* argv[])


int len = atoi(argv[1]); /*指定生成的密码长度*/
srand(time(0)); /*设定随机数种子*/
char *buffer = (char*)malloc(len + 1); /*分配内存*/
generate(len,buffer); /*生成密码*/
puts(buffer); /*输出到屏幕*/
FILE* fp = fopen("pass","w"); /*打开输出文件*/
if(fp == NULL)
return -1;
fwrite(buffer, sizeof(char), len, fp); /*写文件*/
fclose(fp); /*关闭文件*/
free(buffer); /*释放动态分配的内存*/
return 0; /*程序结束*/
参考技术A 有专门教这个的网站,自己百度下了 参考技术B 我记得好象是rand函数吧,可以生成随机数,至于具体的位数,是有参数选择的
这是完整的你只要进去改改数字就可以生成8位的了:希望对你有用!
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

using System.Drawing.Imaging;
using System.Drawing;
using System.IO;

public partial class UserControls_Gif : System.Web.UI.Page

protected void Page_Load(object sender, EventArgs e)

string tmp = RndNum(5).ToUpper();
this.Session["ImageV"] = tmp;
HttpCookie a = new HttpCookie("ImageV", tmp);
Response.Cookies.Add(a);
this.CreateCheckCodeImage(tmp);



private void ValidateCode(string VNum)

Bitmap Img = null;
Graphics g = null;
MemoryStream ms = null;

int gheight = VNum.Length * 15;
Img = new Bitmap(gheight, 30);
g = Graphics.FromImage(Img);
//背景颜色
g.Clear(Color.White);
//文字字体
Font f = new Font("Arial Black", 11);
//文字颜色
SolidBrush s = new SolidBrush(Color.Black);
g.DrawString(VNum, f, s, 3, 3);
ms = new MemoryStream();
Img.Save(ms, ImageFormat.Jpeg);
Response.ClearContent();
Response.ContentType = "image/Jpeg";
Response.BinaryWrite(ms.ToArray());

g.Dispose();
Img.Dispose();
Response.End();


private string RndNum(int VcodeNum)

string Vchar = "0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p" +
",q,r,s,t,u,v,w,x,y,z";
string[] VcArray = Vchar.Split(new Char[] ',' );
string VNum = "";
int temp = -1;

Random rand = new Random();

for (int i = 1; i < VcodeNum + 1; i++)

if (temp != -1)

rand = new Random(i * temp * unchecked((int)DateTime.Now.Ticks));


int t = rand.Next(35);
if (temp != -1 && temp == t)

return RndNum(VcodeNum);

temp = t;
VNum += VcArray[t];

return VNum;

private void CreateCheckCodeImage(string checkCode)

if(checkCode == null || checkCode.Trim() == String.Empty)
return;

System.Drawing.Bitmap image = new System.Drawing.Bitmap((int)Math.Ceiling((checkCode.Length * 15.5)), 30);
Graphics g = Graphics.FromImage(image);

try

//生成随机生成器

Random random = new Random();

//清空图片背景色

g.Clear(Color.White);

//画图片的背景噪音线

for(int i=0; i<25; i++)

int x1 = random.Next(image.Width);
int x2 = random.Next(image.Width);
int y1 = random.Next(image.Height);
int y2 = random.Next(image.Height);

g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);


Font font = new System.Drawing.Font("Arial", 14, (System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic));
System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true);
g.DrawString(checkCode, font, brush, 2, 2);

//画图片的前景噪音点

for(int i=0; i<100; i++)

int x = random.Next(image.Width);
int y = random.Next(image.Height);

image.SetPixel(x, y, Color.FromArgb(random.Next()));


//画图片的边框线

g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);

System.IO.MemoryStream ms = new System.IO.MemoryStream();
image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
Response.ClearContent();
Response.ContentType = "image/Gif";
Response.BinaryWrite(ms.ToArray());

finally

g.Dispose();
image.Dispose();


以上是关于c语言 随机生成一个32位的16进制数的代码的主要内容,如果未能解决你的问题,请参考以下文章

随机生成16位的16进制数

c语言,为啥int类型在16位系统中占2个字节,在32位系统中占4个字节?

给一个C语言字符串转16进制数的函数

AES-128-CBC加密过程中,我想随机产生16位的向量,希望各位能给我一下C语言代码的实现。

c语言中怎么将十六进制中的高位和低位分别存到数组中

C语言中16进制之间的加减乘除运算怎么做?