[リストへもどる]
一括表示

投稿時間:2003/03/18(Tue) 11:50
投稿者名:秋風
Eメール:
URL :
タイトル:
16進数を10進数へ変換する方法
こんにちは。

16進数を10進数へ変換したいのですが、CDEC関数を
使用してみたのですが、うまくいきません。調べては
いるのですが、良い方法が見つからず困っています。
大変初心的で、説明下手で申し訳ありませんが、お分
かりの方教えて下さい。m(_ _)m

投稿時間:2003/03/18(Tue) 12:42
投稿者名:nobu
Eメール:
URL :
タイトル:
Re: 16進数を10進数へ変換する方法
>  16進数を10進数へ変換したいのですが、CDEC関数を

16進数 -> 10進数 は、Val 関数で出来ます。
    Dim cw As String
    cw = "FFFF"
     Label1.Caption = CStr(Val("&H" + cw + "&"))
  [  65535  ] が表示される

投稿時間:2003/03/18(Tue) 14:22
投稿者名:秋風
Eメール:
URL :
タイトル:
Re^2: 16進数を10進数へ変換する方法
こんにちは。

>nobuさん。

返答ありがとうございます。Val関数を使用する事により変換する事は
できました。ただ、"e6cef25a"が、変換すると、"3872322138"となる
はずが、"-422645158"と変換されてしまいます。"0d69"は、正常に
"590808563"となります。頭文字が記号だとダメなのでしょうか?調べ
てはいるのですが分かりません。
お分かりでしたら教えて下さい。お願いします。m(_ _)m

投稿時間:2003/03/18(Tue) 14:34
投稿者名:よねKEN
Eメール:
URL :http://www5b.biglobe.ne.jp/~yone-ken/
タイトル:
Re^3: 16進数を10進数へ変換する方法
>  返答ありがとうございます。Val関数を使用する事により変換する事は
> できました。ただ、"e6cef25a"が、変換すると、"3872322138"となる
> はずが、"-422645158"と変換されてしまいます。

VBで扱う16進数表現はLong型までの範囲のためそうなります。
21億ちょっと以上の値を扱いたい場合は、自前でそういう関数を作成する必要があるでしょう。

投稿時間:2003/03/18(Tue) 14:43
投稿者名:秋風
Eメール:
URL :
タイトル:
Re^4: 16進数を10進数へ変換する方法
>よねKENさん。

早速の返答ありがとうございます。そういう事ですか。
VAL関数のヘルプにありましたが、"FFFF"も42億くらいに
なる為、今回の現象があったのですね。関数の作成方法は
分かりませんが、なんとか調べて作成していこうと思います。
ありがとうございました。m(_ _)m

投稿時間:2003/03/18(Tue) 14:57
投稿者名:nobu
Eメール:
URL :
タイトル:
Re^3: 16進数を10進数へ変換する方法
> できました。ただ、"e6cef25a"が、変換すると、"3872322138"となる
> はずが、"-422645158"と変換されてしまいます。"0d69"は、正常に
> "590808563"となります。頭文字が記号だとダメなのでしょうか?調べ
> てはいるのですが分かりません。

そんなに桁数の多い16進数変換の話は出て来て居ませんでした。
単純に「16進数を10進数へ変換する方法」と。

桁数が多い時には下記のようにして下さい。
実際の処理時にはもっと工夫が必要でしょうが差し当たり
期待値の、「3872322138」は表示されます。
MID関数で分けて配列に入れる。For文で処理する等すれば見やすくなるでしょう。
個々の処理に付いては自分で考えて下さい。
    
    Dim cw As String
    Dim cw1 As String
    Dim cw2 As String
    Dim cw3 As String
    Dim cw4 As String

    Dim cw_val As Double
    Dim cw1_val As Double
    Dim cw2_val As Double
    Dim cw3_val As Double
    Dim cw4_val As Double

    Dim acw1_val As Double
    Dim acw2_val As Double
    Dim acw3_val As Double
    Dim acw4_val As Double

    cw = "E6CEF25A"
    
    cw1 = "E6"
    cw2 = "CE"
    cw3 = "F2"
    cw4 = "5A"
    
     cw1_val = Val("&H" + cw1)
     cw2_val = Val("&H" + cw2)
     cw3_val = Val("&H" + cw3)
     cw4_val = Val("&H" + cw4)
    
      acw1_val = cw1_val * 256 ^ 3
      acw2_val = cw2_val * 256 ^ 2
      acw3_val = cw3_val * 256
      acw4_val = cw4_val
    
   cw_val = acw1_val + acw2_val + acw3_val + acw4_val
    
   Label1.Caption = cw_val

投稿時間:2003/03/19(Wed) 09:00
投稿者名:秋風
Eメール:
URL :
タイトル:
Re^4: 16進数を10進数へ変換する方法
おはようございます。

>nobuさん。
返答が遅くなり申し訳ありません。m(_ _)m
桁が多い事は、後になって分かりましたので、
最初では記述してありませんでした。
nobuさんが掲示してくれましたコードを参考
にテストしていこうと思います。ありがとう
ございました。m(_ _)m

投稿時間:2003/03/19(Wed) 17:56
投稿者名:Lantern
Eメール:
URL :
タイトル:
Re^3: 16進数を10進数へ変換する方法
変数は通常オフセットバイナリで値を読みますので、
これをストレートバイナリに変換するといった考え
でコードしたほうがよいのではと思いました。
4Byteをストレートバイナリで読むサンプルです。

Text1 :0からFFFFFFFFまでの16進を入力
Label1:Text1を10進で表示

Private Sub Command1_Click()
    Dim s16 As String
    Dim s10 As String
    
    s16$ = "&H" & String$(8& - Len(Text1.Text), "0") & Text1.Text
    If CInt(Mid$(s16$, 1, 3)) < 8 Then
        s10$ = CStr(CDbl(s16$))
    Else
        s10$ = CStr(CDbl("&H7FFFFFFF") + CDbl("&H7FFFFFFF") + 2 + CDbl(s16$))
    End If
    
    Label1.Caption = s10$
End Sub