0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

前説

ふと―――
こんな基数変換プログラムがあったら楽しいだろうか?
と思った

勿論、私が楽しめれば充分なんですが…

「こんな」の内訳

  • 任意の基数に対応
    8進でも 16進でも n進どんと来いっ
  • 任意の文字に対応
    16進が [0-9A-F] でなくたっていいじゃないか、だもの
  • option base 1 な数列に対応したい
    つまりExcelの列名を表現可能って事

※ あ、「基数変換」についての解説はナシの方向で…

実装

ツールとして提供するのではなく、あくまでもロジックをお見せするだけ―――
なので、単純メソッドで諸々完結する様にしたいなぁ

てな訳で、以下

intを任意基数の文字列に変換する
string ToRadix(int num, string Chars, int origin = 0) {
	int radix = Chars.Length;
	StringBuilder sb = new StringBuilder();

	while (num > 0) {
		int r = (num - origin) % radix;
		num = (num - origin) / radix;
		sb.Insert(0, Chars[r]);
	}

	return sb.Length == 0 ? $"{Chars[0]}" : $"{sb}";
}
任意基数の文字列をintに変換する
int ToDecimal(string num, string Chars, int origin = 0) {
	int radix = Chars.Length;
	int result = 0;

	for (int i = 0; i < num.Length; i++)
		result = result * radix + Chars.IndexOf(num[i]) + origin;

	return result;
}

それぞれ第2パラメータは数値を表現する「文字」の集合
なので、この文字列の長さが期待する「基数」になります

第3パラメータは通常省略する(既定値としては0(zero)となる)
1(one)」を指定すると、自然数列(?表現が正しいか分からない)扱いとなる
が、多分Excelの列名の変換位にしか役立たないかも…
それ以上の値を指定した場合、用途(と云うか有用性?)は更に不明

序でに云うなら、上記メソッドは整合性の検査はしていませんので、変換可能な正しいデータを渡す必要があります
あ、それと符号は受け付けませんので、負数の表現や補数表記もできません
正の整数の範囲でお楽しみ頂ければ幸いで御座います

実行例

簡単なUIを持つプログラムで動作確認

image.png

image.png

ま、ここら辺はオッケーですね


お次は…
image.png

image.png

お分かり頂けただろうか?

16進表記の「6f」は10進数で「111
次に10進「111」は8進で表記すると「157」になる、事が分かる

さて、ところで、0x6fASCII文字としては小文字のo(オー)になる―――
oは(8進で)157
また、Oは8進表記=Octalを表している

つまり、O157の存在は必然である
と云える…

なんてね

1 origin

じゃぁ、1 originの方を確認

image.png

image.png

カラム位置「XFD」は16384列目だという事で、こちらも問題なし

おまけ

任意基数字列を表現する文字集合を指定できるので…

image.png

とか

image.png

の様な変換も可能

後記

たのしゅうございました




――――――――
指折りフォントを自作すれば、自分の指を攣らせる事なく32進表記のビット列を簡単に表現できるなぁ…
32進表記のアクセスカウンタ?

それはそれで――
アリかも知れない

まだ暫く楽しめそうです:grinning:

0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?