c#&js ASCII与随机数

本文探讨了在C#和JavaScript中生成指定范围内的随机数的方法,包括单个和多个范围的随机数生成,并展示了如何将这些随机数转换为ASCII字符,用于生成随机字符串,涵盖大小写字母和数字。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有感而发,为什么会写这个呢,是因为曾经有这么个题,从26个英文字母里随机取1000个,然后我的做法居然是,先手动建个数组,手动往里填“a-z”26个字符,再用随机下标去取,实在是惨不忍睹

1.生成范围内的伪随机整数(result >=min && result < max)
c#.

Random r = new Random();
r.Next(min, max)
//当想连续生成随机数时,不能new多个实例,应该使用公用的实例,连续Next,不过我发现我在 .net core里 可以连续new多个实例而没有重复.
//正确用法
//1.使用同一个实例
Random r = new Random();
 for(int i = 0; i< 1000; i++)
 {
     Console.WriteLine(r.Next(65,65+26));
 }
 //2.每次给不同的随机种子
 for(int i = 0; i< 1000; i++)
 {
 	 Random r = new Random(Guid.NewGuid().ToByteArray()[0]);
     Console.WriteLine(r.Next(65,65+26));
 }
 
//错误用法(.net core里正常)
 for(int i = 0; i< 1000; i++)
 {
 	Random r = new Random();
    Console.WriteLine(r.Next(65,65+26));
 }

js.

function Random(min,max){return Math.floor(Math.random()*(max-min)+min);}

2.生成多个范围内的伪随机整数
c#.

RandomRang(new int[][] { new int[] { 65, 65 + 26 }, new int[] { 97, 97 + 26 } });
RandomRang(new int[] { 65, 65 + 26 }, new int[] { 97, 97 + 26 });
RandomRang(new int[] { 65, 65 + 26 });
int RandomRang(params int[][] arguments)
{
      if (arguments.Length > 0)
      {
          Random r = new Random(Guid.NewGuid().ToByteArray()[0]);//每次给不同的随机种子
          var temp = new List<int>();
          for (var i = 0; i < arguments.Length; i++)
          {
              temp.Add(r.Next(arguments[i][0], arguments[i][1]));
          }
          return temp[r.Next(0, temp.Count)];
      }
      return 0;
  }

js.

RandomRang([65,65+26]);
RandomRang([65,65+26],[97,97+26],[48,48+10]);
function RandomRang(){
	if(arguments.length>0){
		var temp=[];
		for(var i=0;i<arguments.length;i++){
			temp.push(random(arguments[i][0],arguments[i][1]));
		 }
		return temp[random(0,temp.length)];
	 } 
 }

然后就可以把它们和ASCII码联系起来玩了
1.从26个小写字母里随机取1000个
c#.

StringBuilder strB = new StringBuilder(1000);
Random r = new Random();
for (int i = 0; i < 1000; i++)
{   
    strB.Append(Encoding.ASCII.GetString(new byte[] { (byte)(r.Next(97, 97+ 26)) }));
}
Console.WriteLine(strB.ToString());

js.

var temp=[];
for (var i = 0; i < 1000; i++)
{   
    temp.push(String.fromCharCode(Random(97,97+26)));
}
console.log(temp.join(''));

2.从26个大写字母里随机取1000个
c#.

StringBuilder strB = new StringBuilder(1000);
Random r = new Random();
for (int i = 0; i < 1000; i++)
{   
    strB.Append(Encoding.ASCII.GetString(new byte[] { (byte)(r.Next(65, 65+ 26)) }));
}
Console.WriteLine(strB.ToString());

js.

var temp=[];
for (var i = 0; i < 1000; i++)
{   
    temp.push(String.fromCharCode(Random(65,65+26)));
}
console.log(temp.join(''));

2.从26个大写字母、26个小写字母、0-9里随机取1000个
c#.

StringBuilder strB = new StringBuilder(1000);
Random r = new Random();
for (int i = 0; i < 1000; i++)
{   
    strB.Append(Encoding.ASCII.GetString(new byte[] { (byte)(RandomRang(new int[] { 65, 65 + 26 }, new int[] { 97, 97 + 26 }, new int[] { 48, 48 + 10 })) }));
}
Console.WriteLine(strB.ToString());

js.

var temp=[];
for (var i = 0; i < 1000; i++)
{   
    temp.push(String.fromCharCode(randomRang([65,65+26],[97,97+26],[48,48+10])));
}
console.log(temp.join(''));

如果不记得a、A、0的ASCII码是多少,也不用怕
c#.

var A=Encoding.ASCII.GetBytes("A")[0];
var a=Encoding.ASCII.GetBytes("a")[0];

js.

var A='A'.charCodeAt();
var a='a'.charCodeAt();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值