夜行録 - 酔歩.net
日暮れて道遠し さらに夜道を行く もって夜行録と名付く
random な文字列生成
調べてみたけど、ループ使うのばっかり(乱数1個ふって1文字を string に追加)ばっかりで萎え。
もっとさくっと作れると思ったんだがなぁ……。
hash 関数もナニだしなぁ…。
で、できたのが下のコード。
やっぱり for() が残ってるんじゃん…。とか、数値、文字、数値、文字と変換するのがイケてない…。
よく考えたらマスクとビットシフトってものがあるんだった。修正済み
#include <stdio.h> #include <stdlib.h> #include <assert.h> #include <time.h> "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789@:"#38; 077; _N[1] = (n & 07700) >> 6; _N[2] = (n & 0770000) >> 12; _N[3] = (n & 077000000) >> 18; _N[4] = (n & 07700000000) >> 24; "%c%c%c%c%c"#38;_Y[5], rand()); #38;_Y[10], rand()); "]%s[\n",_Y); }
キモは、A-Za-z0-9は62文字なので、まるめて64文字6bitあればいいというのと、それが8進2桁になること。4byte整数があれば5文字作れるはず。
てか、タダの base64 の変種だな。まあ、自作の乱数クラスにはっつけとけば、なにかに使うだろう。
2010年01月07日 (Thu) - 19:01:54 - その他雑記 - 5053x - permalink
Karma points: 6. Do you like this article? [yes/no]
Karma points: 6. Do you like this article? [yes/no]
- Use this Trackback URL for ping (right mouse click and copy URL).
- You can [print] this article, DISALLOWED (MailToAFriend) it, or export a [PDF].