random な文字列生成

調べてみたけど、ループ使うのばっかり(乱数1個ふって1文字を string に追加)ばっかりで萎え。

もっとさくっと作れると思ったんだがなぁ……。

hash 関数もナニだしなぁ…。

で、できたのが下のコード。
やっぱり for() が残ってるんじゃん…。とか、数値、文字、数値、文字と変換するのがイケてない…。

よく考えたらマスクとビットシフトってものがあるんだった。修正済み

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <assert.h>
  4. #include <time.h>
  5. "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789@:"#38; 077;
  6. _N[1] = (n &#38; 07700) >> 6;
  7. _N[2] = (n &#38; 0770000) >> 12;
  8. _N[3] = (n &#38; 077000000) >> 18;
  9. _N[4] = (n &#38; 07700000000) >> 24;
  10. "%c%c%c%c%c"#38;_Y[5], rand());
  11. #38;_Y[10], rand());
  12. "]%s[\n",_Y);
  13. }

キモは、A-Za-z0-9は62文字なので、まるめて64文字6bitあればいいというのと、それが8進2桁になること。4byte整数があれば5文字作れるはず。

てか、タダの base64 の変種だな。まあ、自作の乱数クラスにはっつけとけば、なにかに使うだろう。


19:01:54 - 07.01.10 - kuroyagi - その他雑記 - 3094x