『数値表現変換について_その2』(フェンダー) [[20120603002950]]の 関連で引き続きご質問させていただきます。 以前バイナリ進数からゾーン進数への 数値表現変換を勉強させていただきました。 前回は 2バイトから4バイトへの変換でしたが 今回は 4バイトから8バイトへの変換でご質問させていただきます。 1234(2バイトデータ)1*16進数3剰 + 2*16進数2剰 + 3*16進数1剰+ 4 VBA計算式→  tmpStr = Format(bb(1) * 16 ^ 2 + bb(2), "0000")で   VBAがバイナリ2バイトからゾーン4バイトへ   自動的に計算してくれると教えていただきました。 12345678と4バイトのバイナリ進数データがあったとします。 4バイトから8バイトへの変換計算式でいうと 1*16進数7剰 + 2*16進数6剰 + 3*16進数5剰+4*16進数4剰  +5*16進 数3剰 + 6*16進数2剰++ 7*16進数1剰+8 の計算式になりますよね?? VBAが自動的にしてくれる計算方式がよく分からないのですが・・・ よろしくお願いします。 (フェンダー) -------------------------------------------------------------------------------- こっちのスレッドにも質問があることを見逃していました。 >tmpStr = Format(bb(1) * 16 ^ 2 + bb(2), "0000")で 1バイトデータ二つをバイナリデータに見立てて10進数に変換する計算は、上記でしたね!! 今度は、 1バイトデータ4つをバイナリデータに見立てて10進数に変換する計算は、 1バイトのデータは、二桁の16進数が入っていると見なせますから、 Dim bb(1 To 4) As Byte Dim tmpstr As String bb(1) = &H12 bb(2) = &H34 bb(3) = &H56 bb(4) = &H78 この四つ配列から、 &h12345678 という8桁の16進データを作るには? bb(1)のデータは、6桁桁上げするのですから、16^6を掛ける bb(2)のデータは、4桁桁上げするのですから、16^4を掛ける bb(3)のデータは、2桁桁上げするのですから、16^2を掛ける bb(4)のデータは、0桁桁上げするのですから、何も掛けない(正確には,16^0=1を掛ける) ということになります。 10進数ならば、どうすればよいかをまず考えて、その規則を16進に当てはめていくと理解できます。 よって、今回の例題だと Sub test2() Dim bb(1 To 4) As Byte Dim tmpstr As String bb(1) = &H12 bb(2) = &H34 bb(3) = &H56 bb(4) = &H78 tmpstr = Format(bb(1) * 16 ^ 6 + bb(2) * 16 ^ 4 + bb(3) * 16 ^ 2 + bb(4), "00000000") MsgBox tmpstr End Sub 表示される値は、305419896 で9桁ですね!! これでは、8桁を越えてしまいます。 これは、前回の2バイトバイナリデータのときも懸念されていたことですが 実際には、&h12345678 このような数字は、4バイトバイナリデータとしては,入ってこないと 思われます。&h5F5E0FF ここまでの数字しかしか入ってこないと思います。 オフコンの言語には、10進の桁数で変数が定義できるものがありますからね!! 以上です これも新規投稿を行い、このスレッドを リンクした方がよいと思いますよ!!  このスレ、長いでしょう? ichinose ご説明どうもありがとうございます。 >実際には、&h12345678 このような数字は、4バイトバイナリデータとしては,入ってこないと 思われます。&h5F5E0FF ここまでの数字しかしか入ってこないと思います。 確かに前回の2バイトバイナリデータのときも 結果が0080や0005など先頭が00で始まるようなデータになってます。 テストデータがまだ手元にないのですが 入りしだいDAT入出力の結果を見ながら検証を行ってみます。 (フェンダー)