Skip to main content
Home
for DLMS smart meters
Open source solutions for DLMS smart metering

Main navigation

  • Home
  • Products
  • About us
  • Open Source
  • Community
  • Forum
  • Downloads
User account menu
  • Log in

Breadcrumb

  1. Home
  2. Does CGXDLMSVariant::Equals(CGXDLMSVariant& Item) Work?

Does CGXDLMSVariant::Equals(CGXDLMSVariant& item) work?

Forum Rules

Before commenting read Forum rules

Don't comment the topic if you have a new question.

You can create a new topic selecting correct category from Gurux Forum and then create a new topic selecting "New Topic" from the top left.

Profile picture for user Dmitry
By Dmitry , 15 February, 2022
Forums
Gurux.DLMS

Hi, Mikko!

I try this:
CGXDLMSVariant str1(std::string("hello"));
CGXDLMSVariant str2(std::string("hello"));
bool eq1=str1.Equals(str2); //returns false but these variables are equal

CGXDLMSVariant v1(99);
v1.ChangeType(DLMS_DATA_TYPE_UINT16);
CGXDLMSVariant v2(99);
v2.ChangeType(DLMS_DATA_TYPE_UINT16);
bool eq2=v1.Equals(str2); //returns false but these variables are equal

Is it OK? Which data type must be CGXDLMSVariant for correct work Equals() method?

Thanks!

Profile picture for user Kurumi

Kurumi

4 years 5 months ago

Hi Dmitry,

Hi Dmitry,

Equals-method is planned to work with integer numbers and it's not working with double, string, bit-string, or octet-string at the moment.

Change this and it will work with numbers. :-)
bool eq2 = v1.Equals(str2);
to
bool eq2 = v1.Equals(v2);

BR,
Mikko

Profile picture for user Kurumi

Kurumi

4 years 5 months ago

Hi,

Hi,

Can you test this again?
CGXDLMSVariant str1(std::string("hello"));
CGXDLMSVariant str2(std::string("hello"));
bool eq1=str1.Equals(str2);

I did try it and Equals-method with string was working. eq1 was true.

BR,
Mikko

Profile picture for user Dmitry

Dmitry

4 years 5 months ago

//Change this and it will

//Change this and it will work with numbers. :-)
//bool eq2 = v1.Equals(str2);
//to
//bool eq2 = v1.Equals(v2);
It's my fail! :)

I tested again
CGXDLMSVariant str1(std::string("hello"));
CGXDLMSVariant str2(std::string("hello"));
bool eq1=str1.Equals(str2);
eq1 was false.

If i add to Equals() this:
if (size != 0)
{
switch(vt)
{
case DLMS_DATA_TYPE::DLMS_DATA_TYPE_STRING:
{
return strVal == item.strVal;
}
//add other types
default:;
}
return memcmp(&this->bVal, &item.bVal, size) == 0;
}
Now eq1 == true

Profile picture for user Kurumi

Kurumi

4 years 5 months ago

Hi,

Hi,

I don't know why it succeeds for me every time. But it's changed for the next release to this:
if (vt == DLMS_DATA_TYPE_STRING)
{
return strVal == item.strVal;
}
int size = GetSize();
....

BR,
Mikko

  • Create new account
  • Reset your password

Hire Us!

Latest Releases

  • Mon, 07/27/2026 - 12:37
    gurux.dlms.cpp 9.0.2607.2701
  • Thu, 07/23/2026 - 16:19
    gurux.dlms.java 4.0.96
  • Thu, 07/09/2026 - 14:34
    Gurux.DLMS.Python 1.0.201
  • Fri, 06/26/2026 - 16:32
    Gurux.Service 3.0.2606.2601
  • Wed, 06/24/2026 - 08:36
    Gurux.DLMS.Python 1.0.200

New forum topics

  • Service not known error on gprs communication
  • Help Needed: Interfacing Saral 100 Energy Meter with Microcontroller via RS232
  • Connecting Meter to Agent via serial
  • Reading block profile with Compact array
  • DLMS server - serving multiple similar datasets gathered from multiple meters across distinct logical addresses
More

Who's new

  • BaEdhlfwwvUqFMkOYk
  • CrzONrPdvkWUif…
  • kra4026
  • HilipLot
  • NithnCXPiBJHVG…
RSS feed
Privacy FAQ GXDN Issues Contact
Follow Gurux on Twitter Follow Gurux on Linkedin