|
IKKI です。こんばんは。
> 現在、"4桁"の2進数を16進数、"1桁"の16進数→2進数変換をするのに
> 下記のような方法で実現しています。
秀丸マクロの問題というより、プログラミングの例題ですね。
http://www.comm.twcu.ac.jp/~nabe/lec-2003/etc/CompScience.html
> この方法ですと、1111→F 、F→1111といった場合は一回の処理ですむのですが
> 11111111→FF 、FF→11111111としたいときは処理を繰り返さなければならず
> 桁数が増えていくと、どんどん処理回数が増えてしまいます。
while 文を使って文字列を1文字ずつ処理する例が参考になります。
http://homepage2.nifty.com/jr-kun/hidemaru_qa/HMM0044A.html
それと、秀丸の「マクロ入門用ヘルプ」がかなり助けになると思います。
マクロヘルプ目次の「マクロを初めて作成する方はこちらへ」というリンクを
クリックすると現れます。
ロジックを考えるのも楽しいものです。ご健闘をお祈りします。 o(^^)o
▼愚直な解答例
(選択範囲が対象。「4桁ずつ」という仕様は無視してます)
---------------
// 16進→2進
call NumToBin val("0x" + gettext(seltopx, seltopy, selendx, selendy));
insert $$return;
endmacro;
NumToBin: // 数値 → 2進表記文字列
##num = ##1;
while (##num > 0) {
$$bin = str(##num % 2) + $$bin;
##num = ##num / 2;
}
return $$bin;
---------------
// 2進→16進
call BinToNum gettext(seltopx, seltopy, selendx, selendy);
insert hex(##return);
endmacro;
BinToNum: // 2進表記文字列 → 数値
while (##p < strlen($$1)) {
##num = ##num * 2 + val(midstr($$1, ##p, 1));
##p = ##p + 1;
}
return ##num;
と、だらだら書いてるうちに ながさわ さんがスマートな解答例を出されていますね
…。(汗)
|
|