人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

VISUAL BASIC にて、10進数と62進数(0〜9,a〜z,A〜Z)の相互変換ができる関数をお教え願います(ただし10進数の桁数は、1桁から1000桁)

●質問者: shochankun
●カテゴリ:コンピュータ 科学・統計資料
✍キーワード:Visual Basic 進数 関数
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● luckyII
●40ポイント

http://www.hatena.ne.jp/1111205892#

人力検索はてな - VISUAL BASIC にて、10進数と62進数(0〜9,a〜z,A〜Z)の相互変換ができる関数をお教え願います(ただし10進数の桁数は、1桁から1000桁) ..

VBにそのような関数は無いように思います。

そもそも英字の大文字小文字を使った62進数ってのも一般的じゃないですから、無くて当然でしょう。

と言うだけではアレなので、即興で作ってみました。

Public Function ChangeRadix(ByVal InData As String, _

ByVal InRadix As Integer, _

ByVal OutRadix As Integer) As String

Const DigitString = ”0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ”

Dim tmpRem As Integer

Dim tmpQuot As Integer

Dim Quot As String

Dim inlen As Integer

Dim col As Integer

Dim OutData As String

Dim n As Integer

OutData = ””

Do

Quot = ””

tmpRem = 0

inlen = Len(InData)

For n = 1 To inlen

col = InStr(DigitString, Mid(InData, n, 1))

If col = 0 Then

ChangeRadix = ””

Return

End If

tmpRem = tmpRem * InRadix + col - 1

tmpQuot = tmpRem ¥ OutRadix

tmpRem = tmpRem Mod OutRadix

If tmpQuot <> 0 Or Quot <> ”” Then

Quot = Quot & Mid(DigitString, tmpQuot + 1, 1)

End If

Next

OutData = Mid(DigitString, tmpRem + 1, 1) & OutData

InData = Quot

Loop While Quot <> ””

ChangeRadix = OutData

End Function

・手元にVBがないので、ExcelのVBAでやってみました。同じだと思いますが。

・エラーチェックがかなりいい加減です。

・即興なのでテストもいい加減です。間違ってたらすみません。

・1000桁のデータが作れなかったんで未確認です。原理的には32767桁までいけるはずだとは思いますが。

って、インデントが全部無くなってますね。そこは自力でよろしく。

◎質問者からの返答

ありがとうございました

たすかりました

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ