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