【问题标题】:How to copy float data into byte array with Delphi?如何使用 Delphi 将浮点数据复制到字节数组中?
【发布时间】:2020-11-12 07:20:46
【问题描述】:

我正在用 Delphi 做一个项目。有一个我想写的函数。我需要将浮点数据放入字节数组(TArray)中。该函数的c#代码如下。

public void SetCalibrationValue(byte channel, float value)
        {
            if (!serialPort.IsOpen)
                return;

            byte[] b = new byte[] {0x7E, 0x0B, 0x04, 0x01, 0x05, channel, 0x00, 0x00, 0x00, 0x00, 0x00};
            Array.Copy(BitConverter.GetBytes(value), 0, b, 0x07, sizeof(float));

            serialPort.Write(b, 0, b.Length);

            if (OnDataTransmit != null)
                OnDataTransmit(new DataTransmitEventArgs(b));
        }

我想用delphi 来做这个代码。到目前为止,我已经做到了,但我无法继续。 这是我的代码:

procedure PListenerx.SetCalibrationValue (channel:Byte;value:single);
var
     b:TArray<Byte>;
     c:TArray<Byte>;
begin
     //Comport kapalıysa kontrolü yapılacak
     b[0]:=$7E;
     b[1]:=$0B;
     b[2]:=$04;
     b[3]:=$01;
     b[4]:=$05;
     b[5]:=channel;
     b[6]:=$00;
     b[7]:=$00;
     b[8]:=$00;
     b[9]:=$00;
     b[10]:=$00;

    

end;

【问题讨论】:

    标签: delphi delphi-7


    【解决方案1】:
    Move(value, b[7], SizeOf(Single));
    

    将用 `value 填充 b 数组的末尾

    请注意,Delphi 7 中没有泛型数组,所以代码看起来像

    procedure PListenerx.SetCalibrationValue (channel:Byte;value:single);
    var
         b: array of Byte;
    begin 
         SetLength(b, 11);
         //Comport kapalıysa kontrolü yapılacak
         b[0]:=$7E;
         b[1]:=$0B;
         b[2]:=$04;
         b[3]:=$01;
         b[4]:=$05;
         b[5]:=channel;
         b[6]:=$00;
         //no need to fill array end with junk
    
         Move(value, b[7], SizeOf(Single));
    
         //now send b[] to the port
    end; 
    

    【讨论】:

    • 谢谢,你知道如何写这一行:Array.Copy(BitConverter.GetBytes(value), 0, b, 0x07, sizeof(float));
    • 我确实为那行写了替换;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多