浮動小数点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
注意して追加します
私たちは封包技術を研究する時、浮動小数点を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で書いたシングル精度の浮動小数点変換ツールで検証できます。
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で書いたシングル精度の浮動小数点変換ツールで検証できます。