基数変換10 16

提供:MeryWiki
ナビゲーションに移動 検索に移動

概要[編集]

10進数を16進数に、16進数を10進数に変換します。

機能[編集]

  • 選択範囲がない場合何もしません。
  • 1つの数値を選択しマクロを実行すると10進数なら16進数に、16進数なら10進数に変換します。
  • 16進数への変換の場合、数値の頭に"0x"を付加します。
  • 選択状態を保持します。

注意事項[編集]

  • 選択範囲に数値以外の文字列が含まれていた場合、何もしません。
  • "0x"または"0X"が付加された数値を16進数として解釈します。
  • 0FF'Hのような表記方法は考慮していません。
  • 広範囲に渡る複数の数値の変換には対応していません。
  • 16進数への変換の場合、A~Fの数字は大文字に変換されます。小文字が良い場合は「.toUpperCase()」を削除してください。

変更履歴[編集]

  • 1.0.2 (2020-12-27)
    • マルチカーソル
  • 1.0.1 (2019-04-12)
    • Quitを無くす修正
  • 1.0.0 (2019-02-10)
    • 初版

ソースコード[編集]

#title = "基数変換10_16"

if(document.selection.Mode === meModeMulti){
	doMultiActionMini(radix);	// 複数範囲
}else{
	radix();
}
function radix(){	// 基数変換
	var s = document.selection;
	var key = s.Text.slice(0,2).toLowerCase();
	var str = "";

	if(s.IsEmpty)		return;	// 選択範囲がなければ中止
	if(isNaN(s.Text))	return;	// 変な文字が混ざってても中止("0x"はOK)
	if(key == "0x"){
		// 16進数ならば10進数(文字列)に変換
		str = String(parseInt(s.Text, 16));
	}else{
		// 10進数ならば16進数に変換し、頭に"0x"を付加する
		str = "0x" + Number(s.Text).toString(16).toUpperCase();
	}
	s.Text = str;
	s.SetAnchorPos(s.GetActivePos()-str.length);
}
function doMultiActionMini(fn){	// 簡易版
	var Doc = Document, ds = Doc.Selection;
	ds.Mode = meModeMulti;
	if(ds.Mode == null){fn(); return;} //◆Mery 2 以前

	var len = Doc.TextLength;
	var sels = [];
	for(var i=0, n=ds.Count||1; i<n; i++){
		// 選択範囲をマイナスオフセットで記憶
		sels.push({anc:ds.GetAnchorPos(i)-len, act:ds.GetActivePos(i)-len});
	}
	BeginUndoGroup();
	AddUndo();
	for(var i=0; sels[i]; i++){
		ds.SetActivePos(sels[i].act+len);
		ds.SetAnchorPos(sels[i].anc+len); // シングル選択
		fn(); // 本処理
		// 選択範囲を更新(マイナスオフセット解除)
		sels[i] = {anc:ds.GetAnchorPos(), act:ds.GetActivePos()};
		len = Doc.TextLength;
	}
	EndUndoGroup();
	for(var i=0; sels[i]; i++){
		ds.AddPos(sels[i].anc, sels[i].act); // 選択範囲を復元
	}
}
スポンサーリンク