tagCANDY CGI VBレスキュー(花ちゃん) - 2進、10進、16進...の基数変換(VB6.0) - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
2進、10進、16進...の基数変換(VB6.0)
元に戻る スレッド一覧へ 記事閲覧
このページ内の検索ができます。(AND 検索や OR 検索のような複数のキーワードによる検索はできません。)

2進、10進、16進...の基数変換(VB6.0) [No.4の個別表示]
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.0 用 トップページ
日時: 2010/01/07 13:46
名前: 花ちゃん

***********************************************************************************
* カテゴリー:[文字列処理][アルゴリズム][]                                        *
* キーワード:進数変換,自作関数,M進数の数値をN進数に変換,8進,36進,            *
***********************************************************************************

旧のわいわいがやがや広場に投稿頂いた分です。これで3度目の引っ越しになります。

-----------------------------------------------------------------------------------
2進、10進、16進...の基数変換(VB6.0) 投稿者:ささ 投稿日:2005/08/04(Thu) 20:20 No.140
------------------------------------------------------------------------------------

基数変換関数です。
ちょっと作ってみました。8進作らなきゃ・・・。    #------ 長い夏休みのようです。(影の声)


Option Explicit

Public Const strHexPreFix As String = "&H"

Public Function Change_16to2(TenNo As String) As String

   Dim IntTenNo_Len As Integer
   Dim strGetHex As String
   Dim strTmpTenNo As String
  
   Change_16to2 = ""
   strTmpTenNo = TenNo
  
   If Len(TenNo) = 0 Then
      Exit Function
   End If
   If (Len(TenNo) Mod 2) = 1 Then
      TenNo = "0" & TenNo
   End If
   IntTenNo_Len = Len(TenNo)
  
   Do While Not (Len(TenNo) = 0)
      strGetHex = Left(TenNo, 2)
      TenNo = Right(TenNo, Len(TenNo) - 2)
  
      If strGetHex <> "00" Then
         Change_16to2 = Change_16to2 & Right("00000000" & _
                        Change_10to2(Val(strHexPreFix & strGetHex)), 8)
      End If
   Loop
   TenNo = strTmpTenNo

End Function

Public Function Change_2to16(TenNo As String) As String

   Dim IntTenNo_Len As Integer
   Dim strGetHex As String
   Dim strTmpTenNo As String
  
   Change_2to16 = ""
   strTmpTenNo = TenNo
  
   If Len(TenNo) = 0 Then
      Exit Function
   End If
  
   If (Len(TenNo) Mod 8) = 1 Then
      TenNo = "0000000" & TenNo
   ElseIf (Len(TenNo) Mod 8) = 2 Then
      TenNo = "000000" & TenNo
   ElseIf (Len(TenNo) Mod 8) = 3 Then
      TenNo = "00000" & TenNo
   ElseIf (Len(TenNo) Mod 8) = 4 Then
      TenNo = "0000" & TenNo
   ElseIf (Len(TenNo) Mod 8) = 5 Then
      TenNo = "000" & TenNo
   ElseIf (Len(TenNo) Mod 8) = 6 Then
      TenNo = "00" & TenNo
   ElseIf (Len(TenNo) Mod 8) = 7 Then
      TenNo = "0" & TenNo
   End If
   IntTenNo_Len = Len(TenNo)
  
   Do While Not (Len(TenNo) = 0)
      strGetHex = Left(TenNo, 8)
      TenNo = Right(TenNo, Len(TenNo) - 8)
  
      If strGetHex <> "00000000" Then
         Change_2to16 = Change_2to16 & Right("00" & Hex(Change_2to10(strGetHex)), 2)
      End If
   Loop
   TenNo = strTmpTenNo

End Function

Public Function Change_10to2(TenNo As Double) As String

   Dim Work As String
   Dim Kazu As Long
   Dim kazu2 As Double
   Dim Cnt As Integer
  
   Work = ""
   Cnt = 0
   If InStr(TenNo, ".") > 0 Then
      '小数点有り
      Kazu = Int(TenNo)
      Do
         Work = CStr(Kazu Mod 2) & Work
         Kazu = Kazu \ 2
      Loop While Kazu > 0
      kazu2 = TenNo - Int(TenNo)
      Work = Work & "."
      Do While kazu2 <> 0
         Work = Work & CStr(Int(kazu2 * 2))
         kazu2 = kazu2 * 2
         If kazu2 >= 1 Then
            kazu2 = kazu2 - 1
         End If
         Cnt = Cnt + 1
         If Cnt = 100 Then 'ストッパー
            Exit Do
         End If
      Loop
   Else
      '小数点無し
      Kazu = Int(TenNo)
      Do
         Work = CStr(Kazu Mod 2) & Work
         Kazu = Kazu \ 2
      Loop While Kazu > 0
   End If
  
   If Len(Work) = 0 Then
      Work = "0"
   End If
   Change_10to2 = Work

End Function

Public Function Change_2to10(TwoNo As String) As Double

   Dim Work As Double
   Dim i As Integer
   Dim kake As Double
  
   Work = 0
   kake = 1
  
   If InStr(TwoNo, ".") > 0 Then
      '小数点有り
      For i = InStr(TwoNo, ".") - 1 To 1 Step -1
         If Mid$(TwoNo, i, 1) = "1" Then
            Work = Work + kake
         End If
         kake = kake * 2
      Next i
      kake = 0.5
      For i = InStr(TwoNo, ".") + 1 To Len(TwoNo)
         If Mid$(TwoNo, i, 1) = "1" Then
            Work = Work + kake
         End If
         kake = kake / 2
      Next i
   Else
      '小数点無し
      For i = Len(TwoNo) To 1 Step -1
         If Mid$(TwoNo, i, 1) = "1" Then
            Work = Work + kake
         End If
         kake = kake * 2
      Next i
   End If
  
   Change_2to10 = Work

End Function
メンテ

Page: 1 |

2進数←→36進数の範囲内で相互変換(VB6.0)  (No.1の個別表示) [スレッド一覧へ]
日時: 2011/04/05 11:31
名前: 花ちゃん

***********************************************************************************
* カテゴリー:[文字列処理][アルゴリズム][]                                        *
* キーワード:進数変換,自作関数,M進数の数値をN進数に変換,8進,36進,            *
***********************************************************************************


下記のサイトに下記のようなものもあります。 --- by 花ちゃん ---

M進数からN進数に変換(2進数←→36進数の範囲内で相互変換)する関数

下記よりダウンロードして下さい。
http://fukkey.dyndns.org/pins/vb/011004/31105.html
メンテ
16進数を10進数へ変換する方法(VB6.0)  (No.2の個別表示) [スレッド一覧へ]
日時: 2011/04/05 11:32
名前: 花ちゃん

***********************************************************************************
* カテゴリー:[文字列処理][アルゴリズム][]                                        *
* キーワード:進数変換,自作関数,M進数の数値をN進数に変換,8進,36進,            *
***********************************************************************************

下記の一連のスレッドでも投稿があります。

http://hanatyan.sakura.ne.jp/logbbs/wforum.cgi?mode=allread&no=3192
メンテ

Page: 1 |

 投稿フォーム               スレッド一覧へ
題  名 スレッドをトップへソート
名  前
パスワード (記事メンテ時に使用)
投稿キー (投稿時 投稿キー を入力してください)
コメント

   クッキー保存   
スレッド一覧へ