c函数 内存拷贝

SetTagFloat("new2",100);
 memcpy("new1","new2",4);
 语句执行不抱错,但new1中数值无变化,100的值没有进去,请高手指点.
 

问题补充:
new1,new2为wincc中浮点数据类型变量,使用memcpy主要目的是将原始数据变量中的字节存储数据,转化为浮点数,(vb调用 api中copymemory功能可以将字节存储数据转换为目标地址数据类型)

最佳答案

你前面的语句并没有产生一个字节类型的数据。

 真要将字节数据,比如一个4个字节的数组,数据拼起来成为float,可以用共同体union来实现。
 

提问者对于答案的评价:
感谢 万泉和 的提示
 原始数据转浮点解包的方法供后来者参考:
 使用共体变量
 union
 {float a[4];//转换后浮点存放
 BYTE b[19];//原始变量存放中转数组,要大于原始变量数据长度
 } uu;
 int j;
 BYTE c[19];//原始变量存放数组
 GetTagRaw("NewTag3",c,20);
 for (j=0;j<=5;j++)
 {
 uu.b[j*4]=c[j*4+3];
 uu.b[j*4+1]=c[j*4+2];
 uu.b[j*4+2]=c[j*4+1];
 uu.b[j*4+3]=c[j*4];
 };

 使用内存拷贝
 BYTE a[100];//原始变量存放数组,
 BYTE b[100];//原始变量存放中转数组
 float c[30];//转换后浮点存放,要大于原始变量数据中转存放数组长度
 int j;
 for (j=0;j<=100;j++)
 {
 b[j]=a[100-j]
 };
 memcpy(c,b,100);

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc275636.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2019年6月11日
下一篇 2019年6月11日

相关推荐