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

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2005/03/19 13:18:12
  • 終了:--

回答(1件)

id:luckyII No.1

luckyII回答回数73ベストアンサー獲得回数02005/03/20 03:17:13

ポイント40pt

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桁までいけるはずだとは思いますが。

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

id:shochankun

ありがとうございました

たすかりました

2005/03/22 13:24:01

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません