如何在 Delphi 中将浮点数转换为十六进制(以及反之)

发布于 2024-08-20 08:26:23 字数 402 浏览 4 评论 0原文

可能的重复:
在 Borland Delphi 中将浮点或负整数转换为十六进制

是否有一个函数可以用来将浮点值转换为十六进制值并返回?

Possible Duplicate:
Converting float or negative integer to hexadecimal in Borland Delphi

Is there a function i can use to convert a floating point value to a hexadecimal value and back?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

帅冕 2024-08-27 08:26:23
procedure ShowBinaryRepresentation;
var
  S, S2: Single;
  I: Integer;
  D, D2: Double;
  I64: Int64;
begin
  S := -1.841;
  I := PInteger(@S)^;
  OutputWriteLine(Format('Single in binary represenation: %.8X', [I]));

  S2 := PSingle(@I)^;
  OutputWriteLine(Format('Converted back to single: %f', [S2]));

  D := -1.841E50;
  I64 := PInt64(@D)^;
  OutputWriteLine(Format('Double in binary represenation: %.16X', [I64]));

  D2 := PDouble(@I64)^;
  OutputWriteLine(Format('Converted back to double: %f', [D2]));
end;
Single in binary represenation: BFEBA5E3
Converted back to single: -1,84
Double in binary represenation: CA5F7DD860D57D4D
Converted back to double: -1,841E50
procedure ShowBinaryRepresentation;
var
  S, S2: Single;
  I: Integer;
  D, D2: Double;
  I64: Int64;
begin
  S := -1.841;
  I := PInteger(@S)^;
  OutputWriteLine(Format('Single in binary represenation: %.8X', [I]));

  S2 := PSingle(@I)^;
  OutputWriteLine(Format('Converted back to single: %f', [S2]));

  D := -1.841E50;
  I64 := PInt64(@D)^;
  OutputWriteLine(Format('Double in binary represenation: %.16X', [I64]));

  D2 := PDouble(@I64)^;
  OutputWriteLine(Format('Converted back to double: %f', [D2]));
end;
Single in binary represenation: BFEBA5E3
Converted back to single: -1,84
Double in binary represenation: CA5F7DD860D57D4D
Converted back to double: -1,841E50
━╋う一瞬間旳綻放 2024-08-27 08:26:23

不是浮点数。 inttohex 可以将整数(也可能是 int64)更改为十六进制字符串。

可能您需要撬开 IEEE 格式双精度类型中的位并将它们更改为十六进制,然后将其与中间的点连接起来。

如果这不是您正在寻找的答案,请具体说明“十六进制值”的含义。

如果您只想将其转换为例如字节数组,请定义一个具有合适大小的字节类型数组(4 表示单精度,8 表示双精度,10 扩展)和类型转换。

Not floating point. There is inttohex to change integers (maybe int64 too) to hex strings.

Probably you need to pry apart the bits in the IEEE format double type and change them to hex which you then concat with a point inbetween.

If this is not the answer you are looking for, please specify what you mean by "hexadecimal value".

If you just want to convert it to an array of e.g. bytes, define a array of byte type with a suitable size (4 for single, 8 for double and 10 extended), and typecast.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文