LoginSignup
1
0

【SATySFi】十進数を十六進数のstringに変換して返すコマンド

Last updated at Posted at 2024-03-24

概要

SATySFiで十進数を十六進数に変換するコマンド \dec2hexを作りました.

ソースコード

まとめてもいいのですが,別の用途でも使用する必要があり次の2つを用意しました.

再帰函数で変換する部分

let-rec dth n = 
	if n < 16 then 
		if n == 0		then `0`
		else if n ==  1 then `1`
		else if n ==  2 then `2`
		else if n ==  3 then `3`
		else if n ==  4 then `4`
		else if n ==  5 then `5`
		else if n ==  6 then `6`
		else if n ==  7 then `7`
		else if n ==  8 then `8`
		else if n ==  9 then `9`
		else if n == 10 then `A`
		else if n == 11 then `B`
		else if n == 12 then `C`
		else if n == 13 then `D`
		else if n == 14 then `E`
		else 				 `F`
	else dth (n/16) ^ dth(n mod 16)

intを受け取って十六進数で返しています.

関数を使ったコマンドを定義する部分

let-inline ctx \dec2hex n = 
	let generateddigits = dth n in
	let digits-as-inline-text = embed-string generateddigits in
	read-inline ctx digits-as-inline-text

使用例

ソース

hextest.saty
@require: stdjareport

let-rec dth n = 
	if n < 16 then 
		if n == 0		then `0`
		else if n ==  1 then `1`
		else if n ==  2 then `2`
		else if n ==  3 then `3`
		else if n ==  4 then `4`
		else if n ==  5 then `5`
		else if n ==  6 then `6`
		else if n ==  7 then `7`
		else if n ==  8 then `8`
		else if n ==  9 then `9`
		else if n == 10 then `A`
		else if n == 11 then `B`
		else if n == 12 then `C`
		else if n == 13 then `D`
		else if n == 14 then `E`
		else 				 `F`
	else dth (n/16) ^ dth(n mod 16)

let-inline ctx \dec2hex n = 
	let generateddigits = dth n in
	let digits-as-inline-text = embed-string generateddigits in
	read-inline ctx digits-as-inline-text

in

document
(|
	title = {10 進数};
	author = {Myso Shake};
|)
'<
	+p{
		\dec2hex(0);
		\dec2hex(1);
		\dec2hex(2);
		\dec2hex(3);
		\dec2hex(4);
		\dec2hex(5);
		\dec2hex(6);
		\dec2hex(7);
		\dec2hex(8);
		\dec2hex(9);
		\dec2hex(10);
		\dec2hex(11);
		\dec2hex(12);
		\dec2hex(13);
		\dec2hex(14);
		\dec2hex(15);
		\dec2hex(16);
	}
	+p
	{
		\dec2hex(17);
		\dec2hex(18);
		\dec2hex(19);
		\dec2hex(20);
		\dec2hex(21);
		\dec2hex(22);
		\dec2hex(23);
		\dec2hex(24);
		\dec2hex(25);
		\dec2hex(26);
		\dec2hex(27);
		\dec2hex(28);
		\dec2hex(29);
		\dec2hex(30);
		\dec2hex(31);
		\dec2hex(32);
	}
>

上のように書くと下のようになります.
image.png

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0