您的位置:首页 > 编程语言 > C语言/C++

C++ 对16进制字符串进行偶校验

2016-06-28 22:42 323 查看

/************************************************************************/

/* 偶校验函数

/* inData: 输入数据,16进制字符串

/* return: 偶校验后的16进制字符串

/************************************************************************/

CString CTestODDDlg::EvenparityFun(CString inData)

{

 CString strRet = "", _indata = inData;

 int inLen = _indata.GetLength();

 

 if (inLen % 2 != 0)

 {

  return "";

 }

 while(_indata != "")

 {

  int sum = 0;

  CString str = "";

  int data = strtol(_indata.Left(2), NULL, 16);  //将16进制数转为10进制

  int tmp = data >> 1;  //去掉校验位

  for (int i=0; i<7; ++i)  //除了校验位,判断1的个数

  {

   if ((tmp & 0x01) == 1)

   {

    sum = sum+1;

   }

   tmp = tmp >> 1;

  }

  

  if ((sum % 2) == 0)  //1的个数为偶数

  {

   if ((data & 0x01) == 1)//校验位为1

   {

    data = data - 1;

   }

  }

  else  //1的个数为奇数

  {

   if ((data & 0x01) != 1)//校验位为1

   {

    data = data + 1;

   }

  }

  

  str.Format("%02X", data);

  strRet = strRet + str;

  

  _indata = _indata.Mid(2);

 }

 

 return strRet;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ 偶校验