gpt4 book ai didi

delphi - 在 Borland Delphi 中将浮点或负整数转换为十六进制

转载 作者:行者123 更新时间:2023-12-02 05:31:10 24 4
gpt4 key购买 nike

我编写了一个程序,使用串行连接与某些硬件进行通信。它以我的方式发送很多十六进制值(传感器读数),并且每隔一段时间它就会发送一个负值。前任。我收到一个十六进制值:FFFFF5D6我必须将其转换为:-2602

我遇到的另一个问题是我无法将 float 转换为十六进制并返回。

有什么简单的方法可以做到这一点吗?

最佳答案

您可以通过使用足够大的整数来覆盖所使用的浮点值,然后使用 ABSOLUTE 关键字,将十六进制“转换”为 float 。真正要做的就是将值的内存编码为整数。使用大小完全相同的类型时要非常小心(您可以使用 SIZEOF 来查找值的内存大小)。如果您需要奇数大小,则对字节数组进行绝对大小并循环并转换为/从每个字节(这将是两个字符的十六进制)。

ABSOLUTE 关键字强制两个变量在同一内存地址处启动,从一个变量写入的任何值在另一个变量中立即可用。

var
fDecimal : Double; // size = 8 bytes
fInteger : Int64 absolute fDecimal; // size = 8 bytes
begin
fDecimal := 3.14;
ShowMessage(format('%x=%f',[fInteger,fDecimal]));
fInteger := StrToInt64('$1234123412341234');
ShowMessage(FloatToStr(fDecimal)+'='+Format('%x',[fInteger]));
end;

这里是奇数大小的 float 的例程:

var
fDecimal : extended;
fInteger : array[1..10] of byte absolute fDecimal;
sHex : string;
iX : integer;
begin
ShowMessage(IntToStr(SizeOf(fDecimal))+':'+IntToStr(SizeOf(fInteger)));
fDecimal := 3.14;
sHex := '';
for iX := 1 to 10 do
sHex := sHex + IntToHex(fInteger[iX],2);
ShowMessage(sHex);
// clear the value
fDecimal := 0.0;
// Reload the value
for iX := 1 to (Length(sHex) DIV 2) do
fInteger[iX] := StrToInt('$'+Copy(sHex,(Ix*2)-1,2));
ShowMessage(FloatToStr(fDecimal));
end;

关于delphi - 在 Borland Delphi 中将浮点或负整数转换为十六进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2200876/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com