<pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

          <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

          <p id="bbfd9"></p>

          <p id="bbfd9"><cite id="bbfd9"></cite></p>

            <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

            <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
            <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
            C語言

            C言語中獲取、生成隨機數的三種方法

            時間:2025-01-25 07:37:31 C語言 我要投稿
            • 相關推薦

            C言語中獲取、生成隨機數的三種方法

              C言語中獲取、生成隨機數的方法有很多種,每種方法都有自己的特色。下面是小編為大家帶來的C言語中獲取、生成隨機數的三種方法,歡迎閱讀。

              隨機數的定義為:產生的所有數字毫無關系.

              在實際應用中很多地方會用到隨機數,比如需要生成唯一的訂單號.

              在C#中獲取隨機數有三種方法:

              一.Random 類

              Random類默認的無參構造函數可以根據當前系統時鐘為種子,進行一系列算法得出要求范圍內的偽隨機數.

              代碼如下:

              Random rd = new Random();

              int i = rd.Next();

              這種隨機數可以達到一些要求較低的目標,但是如果在高并發的情況下,Random類所取到的系統時鐘種子接近甚至完全一樣,就很有可能出現重復,這里用循環來舉例

              代碼如下:

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

              {

              Random rd = new Random();  //無參即為使用系統時鐘為種子

              Console.WriteLine(rd.Next().ToString());

              }

              這個例子會輸出10個相同的"隨機數".

              突顯出的問題:因為Random進行偽隨機數的算法是固定的,所以根據同一個種子計算出的數字必然是一樣的.而以當代計算機的運行速度,該循環幾乎是在瞬間完成的,種子一致,所以會出現10次循環輸出同一隨機數的情況.

              二.Guid 類

              System.Guid

              GUID (Globally Unique Identifier) 全球唯一標識符

              GUID的計算使用到了很多在本機可取到的數字,如硬件的ID碼,當前時間等.所計算出的128位整數(16字節)可以接近唯一的輸出.

              代碼如下:

              Console.WriteLine(Guid.NewGuid().ToString());

              計算結果是xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx結構的16進制數字.當然這個格式也是可以更改的.

              三.RNGCryptoServiceProvider 類

              System.Security.Cryptography.RNGCryptoServiceProvider

              RNGCryptoServiceProvider 使用加密服務提供程序 (CSP) 提供的實現來實現加密隨機數生成器 (RNG)

              代碼如下:

              RNGCryptoServiceProvider csp = new RNGCryptoServiceProvider();

              byte[] byteCsp = new byte[10];

              csp.GetBytes(byteCsp);

              Console.WriteLine(BitConverter.ToString(byteCsp));

              因該類使用更嚴密的算法.所以即使如下放在循環中,所計算出的隨機數也是不同的.

              代碼如下:

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

              {

              RNGCryptoServiceProvider csp = new RNGCryptoServiceProvider();

              byte[] byteCsp = new byte[10];

              csp.GetBytes(byteCsp);

              Console.WriteLine(BitConverter.ToString(byteCsp));

              }

              但是RNGCryptoServiceProvider的計算較為繁瑣,在循環中使用會消耗造成大量的系統資源開銷,使用時需注意.''

              Membership.GeneratePassword()

              Membership是一個方便快捷的進行角色權限管理的類,偶然發現一個很有意思的方法,沒研究過是如何實現的

              代碼如下:

              public static string GeneratePassword(int length, int numberOfNonAlphanumericCharacters);

              //

              // 摘要:

              // 生成指定長度的隨機密碼。

              //

              // 參數:

              // numberOfNonAlphanumericCharacters:

              // 生成的密碼中的標點字符數。

              //

              // length:

              // 生成的密碼的字符數。長度必須介于 1 和 128 個字符之間。

              //

              // 返回結果:

              // 指定長度的隨機密碼。

              例:

              代碼如下:

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

              {

              Response.Write(Membership.GeneratePassword(20, 1) + "

              ");

              }

              結果為

              代碼如下:

              C!&^HoTNv3!ZHkK9BAbu

              azLgER)JJ-UW8q*14yz*

              I3qnb]Zxu16ht!kKZ!Q*

              9U:MAQ&c1x)^aed@xe**

              oL(%4JvfbP&t5*Hpl4l-

              6@zj$CnhW&D+|xOf:qIk

              A/!Di&l*tY$QaMH0gyzY

              z^wu6{1BMq7D^+WU]>f$

              1OgIJS3&09fw0F9.|aXA

              8F+Gy+L{O6x{SfugME*%

              不知是否正好符合你的要求?


            【C言語中獲取、生成隨機數的三種方法】相關文章:

            php獲取隨機數組列表的方法08-31

            C 語言產生隨機數的方法08-28

            C語言產生隨機數的方法08-26

            c語言隨機數生成函數和時間函數10-28

            在C語言/C++中如何產生隨機數08-22

            C語言/C++中如何產生隨機數09-16

            C語言編程中生成隨機數的初級教程10-07

            Python獲取IP地址的三種方法09-29

            Java編程中獲取路徑的方法09-06

                    <pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

                    <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

                    <p id="bbfd9"></p>

                    <p id="bbfd9"><cite id="bbfd9"></cite></p>

                      <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

                      <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
                      <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
                      飘沙影院