基数変換10 16
ナビゲーションに移動
検索に移動
概要[編集]
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); // 選択範囲を復元
}
}
スポンサーリンク