浮動小数点floatを16進文字列に変換する方法(Float ToHex)

2208 ワード

本文は原文から:http://blog.csdn.net/cswangbin/article/details/6053569インスピレーションを受ける
float型から16進に移行するdelphiプログラムを書き直しました。
[delphi]  view plin copy
Function Float ToHex(Value: single): ストリングス   var     lです。 i: インテグ;     HexText、temp HexText、temp: String;   begin     SetLength(HexText) 2 * SizOf(Value)     BinToHex(pchar(@Value)、 pchar(@HexText[1])、 SizOf(Value)     l := length(HexText)     for i := (l div 2) ダウンタウン 1 ド     begin       temp:=copy(HexText,(2*i-1),2);       tempHexText := tempHexText + temp     end;       レスリング := tempHexText;   end;   例:
[delphi]  view plin copy
プロデュース T Form 6.addButonClick(Sender: TObject);   begin     edit Har 3.Text := Float ToHex(-12.545) // sttofloat(editoHar 1.Text)   end;   結果を表示 C 148 B 852、結果は正しいです。-12.545~C 488 B 852
注意して追加します
uses StrUtils{       };
以下は原文です
 私たちは封包技術を研究する時、浮動小数点を16進数に変換することがよくあります。例えばゲーム中のキャラクターの座標は、常に浮動小数点で表示されます。どのように浮動小数点を16進数文字列に変換しますか?DELPHIでの方法を書きます。       まず背景について話しましょう。普通は小数点と言っています。浮動小数点を指します。そして、大きな値がないときは、シングルの精度で浮動小数点を指します。delphiでは、Singleはシングル精度の浮動小数点数で、4バイトの記憶を占め、高精度のDoubleは8バイトを占めています。Realはborlandの初期使用済みで、6バイトを占めていますが、今はだんだんフェードアウトしています。       Delphi中のBinToHex関数を呼び出すことで,その変換を容易に実現できる。以下はDelphiの原型です。
[delphi]  view plin copy
プロデュース BinToHex(Buffer: PAnsi Char; Text: PAnsi Char; BufSize: Integer; クラスembler;   コンサート     Convert: array[0..15] 保存先 Ansi Char = Ansistring('012345789 ABCDEF')   var     I: Integer;   begin     for I := 0 ト BufSize - 1 ド     begin       Text[0] := Covert[Byte(Bffer[I]) shr 4)       Text[1] := Covert[Byte(Bffer[I]) and $F;       Inc(Text 2)     end;   end;         この関数を説明します。メモリ中のアドレスはBuffSizeで、長さはBufSizeのデータを16進にしてTextが指すメモリアドレスに保存します。Textの長さは少なくともBufSize*2が必要です。変換後のデータを下に置くことができます。      これらの背景があれば、私が下に書いたコードを理解することができます。
[delphi]  view plin copy
Function Float ToHex(Value:single):string;   var     HexText: String;   begin     Set Length(HexText、2*SizOf(Value);     BinToHex(pchar(@Value)、pchar(@HexText[1])、SizOf(Value);     return Hextext   end;         例えば、呼び出し時に3.1415に着信したと仮定して、結果は560 E 4940に出力されます。ここの結果は下位が前で、上位が後ろにあることに注意してください。40490 E 56というのは私たちが普通に言っている3.1415です。      Greatboyで書いたシングル精度の浮動小数点変換ツールで検証できます。