「基数変換10 16」の版間の差分

ページの作成:「== 概要 == 10進数を16進数に、16進数を10進数に変換します<br> ファイル:基数変換10_16.zip == 機能 == ・選択範囲がない場合何も...」
 
MSY-07 (トーク | 投稿記録)
SyntaxHighlightにcopyの追加
 
(2人の利用者による、間の14版が非表示)
1行目: 1行目:
== 概要 ==
== 概要 ==
10進数を16進数に、16進数を10進数に変換します<br>
10進数を16進数に、16進数を10進数に変換します。


[[ファイル:基数変換10_16.zip]]
== 機能 ==
* 選択範囲がない場合何もしません。
* 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)
** 初版


== 機能 ==
== ソースコード ==
・選択範囲がない場合何もしません<br>
<syntaxhighlight lang="javascript" copy>
・1つの数値を選択しマクロを実行すると10進数なら16進数に、<br>
#title = "基数変換10_16"
 16進数なら10進数に変換します<br>
・16進数への変換の場合、数値の頭に"0x"を付加します<br>
・選択状態を保持します<br>


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; // 選択範囲がなければ中止
・選択範囲に数値以外の文字列が含まれていた場合、何もしません<br>
if(isNaN(s.Text)) return; // 変な文字が混ざってても中止("0x"はOK)
"0x"または"0X"が付加された数値を16進数として解釈します<br>
if(key == "0x"){
・0FF'Hのような表記方法は考慮していません<br>
// 16進数ならば10進数(文字列)に変換
・空白、カンマなどを無視する機能はありません<br>
str = String(parseInt(s.Text, 16));
・広範囲に渡る複数の数値の変換には対応していません<br>
}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;
・2019/02/10 初版<br>
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); // 選択範囲を復元
}
}
</syntaxhighlight>
スポンサーリンク