正常基于open62541相关C++封装,其相关常用类型有UA_Boolean\Int16\32\Float\Double\String, 这些类型可以从UA_Variant中*(UA_类型*)value.data。比如这里举例一下,UA_Variant value,通过UA_Client_readValueAttribute通过得到value的值,这里UA_Variant是一个结构体。
UA_Client client
UA_Variant value;
UA_Variant_init(&value);
UA_NodeID nodeId = UA_NODEID_STRING(2, "test");
UA_StatusCode status = UA_Client_readValueAttribute(client, nodeId, &value);
if(UA_Variant_hasScalarType(&value, &UA_TYPES[UA_TYPES_INT16]
{
qDebug()<<*(UA_Int16*)value.data<<endl;
}
这里需要注意UA_String这个类型, 通过上述方式不可得到相关值,需要先转换成UA_String,再通过char或者相关方式进行输出处理。
if(UA_Variant_hasScalarType(&value, &UA_TYPES[UA_TYPES_STRING]))
{
UA_String str = *(UA_String*)value.data;
char *c = (char *)str.data;
qDebug()<<c<<endl;
}