2013年9月7日土曜日

文字列バッファの位置を特定する

ある程度長い文字列をテストファイルとして書いたりする場合
「どこまで書けているか」を判断するのは意外と大変です
なぜかというと、charはそもそも8bitとして256種類しか表すことができず、さらに文字となると表すことができる範囲は更に狭くなります

そのため1024byteくらいのバッファをforで0-Fの範囲で埋めると
出てきた文字列がどの場所にいたのか判断しかねる時があります

その時に使える方法



まず、どこにどんな値がでてくるか予めわかっている擬似乱数を用意します
xorshiftがオススメです

そしてバッファに書き込むときにxorshiftから出てきた32bitを8バイトの16進数にして書き込みます
0xFで&を取って1文字としても構いませんが、可能なら8byteのほうが楽だと思います
そして書き込まれた文字列は
「規則に沿った乱数で文字が配置されている状態」
になっているので
ある程度の連続した文字数があれば、正常に出力された文字列と比較することにより、本来はどのあたりに存在する文字かを判定できます

下の画像は上記の方法で生成した文字列です
このように一見すると乱数になっているため、ある程度の長さの文字列が完全一致する箇所は限られます

はじめに上記の文字列を改行を含まない形式で作成しておけば出力された文字列から検索して位置を特定することができます

0 件のコメント:

コメントを投稿