• 締切済み

DOUBLE型の16進HEX文字列変換について

12バイトのHEX文字列(FFFFFFFFFFFFFFFFFFFFFFFF)などを をいったん、10進に変換し、DOUBLE型の変数に設定し、 数値演算を行い 再度HEX文字列(FFFFFFFFFFFFFFFFFFFFFFFF)に変換を行いたいのですが、 変換の方法がわからず困っています。 HEX関数はLONGでしかおこなえないようで・・ すみませんが、ご教授いただけると助かります。 宜しくお願いいたします。

みんなの回答

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.4

変換規則さえ書かれていないので回答不能です。

回答No.3

 DOUBLE FLOATINGは16進数に変換しても意味ないですよ。  64ビットで暗号化されて(パック化?)入っていますので。  参照URLをご覧下さい。(英語で御免ね。IEEE{アイトリプルイー}754)

参考URL:
http://en.wikipedia.org/wiki/Double-precision_floating-point_format
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

double型でも12バイト(96ビット)の整数を完全に代入することはできないし、逆変換すると下位ビットが0になってしまうこともあると思うのですが、それはいいのでしょうか? http://msdn.microsoft.com/ja-jp/library/vstudio/x99xtshc.aspx によると、Double型は64ビットです。 そのうち、指数とか符号とかに一部が使われるので、整数型に換算すると 53bitしかありません。 http://ja.wikipedia.org/wiki/IEEE_754

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

16進数の原理はご存知ですよね? だったらできるんじゃないですか? Function 十進変換(ByVal ヘキサ As String) As Double Dim 位置 As Long Dim 符号 As Long Dim 数値 As Long Dim 結果 As Double '12文字限定 For 位置 = 1 To 12   '位置の示す文字を数値化する   数値 = Val("&H" & Mid(ヘキサ, 位置, 1))   '先頭の場合は符号を設定する   If 位置 = 1 Then     If 数値 > 7 Then 符号 = 15   End If   '結果に加算する   結果 = 結果 * 16 + (数値 Xor 符号) Next If 符号 Then 結果 = -結果 - 1 '結果を返す 十進変換 = 結果 End Function 16進への変換も同じです Function 十六進変換(ByVal 数値 As Double) As String Dim 位置 As Long Dim 符号 As Long Dim 繰越 As Long Dim 剰余 As Long Dim 結果 As String '数値がマイナスならば正にする If 数値 < 0 Then   数値 = -数値   符号 = 15   繰越 = 1 End If '12文字限定 For 位置 = 1 To 12   '16で割った剰余を求める   剰余 = 数値 - Fix(数値 / 16) * 16   '数値を更新する   数値 = Fix(数値 / 16)   '負の場合は反転して繰越を加算する   If 符号 Then     剰余 = (剰余 Xor 符号) + 繰越     '15を越えたら繰り越す     If 剰余 > 15 Then       剰余 = 0       繰越 = 1     Else       繰越 = 0     End If   End If   '文字化して前方に付け加える   結果 = Hex(剰余) & 結果 Next '結果を返す 十六進変換 = 結果 End Function

関連するQ&A