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 <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进制数的代码的主要内容,如果未能解决你的问题,请参考以下文章
c语言,为啥int类型在16位系统中占2个字节,在32位系统中占4个字节?