delphi - 如何使用 Delphi 将浮点数据复制到字节数组中?
问题描述
我正在用 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;
解决方案
Move(value, b[7], SizeOf(Single));
b
将用 `value填充数组的末尾
注意 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;
推荐阅读
- python - TensorFlow Keras:在 model.fit 期间打印并保存损失和梯度
- sql - Amazon SQL 工作面试问题:购买了 2 次以上的客户
- python - numpy中的向量化均值滤波器
- sql - 如何计算sql中的不同标志
- c++ - 如何为扑克游戏生成 2,598,960 手(有效方式)
- r - 用于复杂线性混合模型的 R lme4 包
- reactjs - ASP.NET Core:通过 http 而不是 https 请求 SPA 包
- dart - MongoDartError(MongoDart 错误:未知顶级运算符:$filter):Dart
- google-cloud-firestore - 使用 Inline Fulfillment 到 Firestore 的 Dialogflow - 将所有用户数据存储在一个文档中
- git - 我需要在 git 中跟踪 .gitmodules 文件吗?