MFC

HEX CString to BYTE array

leo21c 2023. 5. 8. 12:15

MFC Unicode CString을 BYTE 배열로 리턴하는 함수 예제

HEX string은 "0xab 0x01 0x02 0x03 0xfa 0xFF"와 같이 Space로 구분되어 있을 경우


/// 유니코드 CString
/// strData = _T("0xab 0x01 0x02 0x03 0xfa 0xFF");
/// rt[] = { 253, 1, 2, 3, 250, 255 };
byte* etUsbTestDlg::StringToHex(CString strData)
{
	CString strValue;

	int i = 0; // substring index to extract
	TCHAR chSep = ' ';
	byte rt[1024] = { 0, };
	while (AfxExtractSubString(strValue, strData, i, chSep))
	{
		if (strValue.GetLength() != 0)
		{
			strValue = strValue.Trim();
			int pos = strValue.Find(_T("0x")); //0xFC
			if (pos == -1) break;

			CString value = strValue.Mid(2, strValue.GetLength() - 2);
			value = value.MakeUpper();

			char *pValue = (LPSTR)(LPCTSTR)value;
			//value = _T("AB");
			//pValue[] = { 'A', 0, 'B', 0 };
			byte bValue = 0;
			if (pValue[0] >= 'A')
				bValue = (pValue[0] - 'A' + 10) * 16;
			else
				bValue = pValue[0] * 16;

			if (pValue[2] >= 'A')
				bValue += (pValue[2] - 'A' + 10);
			else
				bValue += pValue[2];

			rt[i] = bValue;
		}
		i++;
	}

	return rt;
}

MFC의 AfxExtractSubString 함수를 이용하서 Space Split을 처리하고 각각의 단어를 구분해서 Hex 값을 구하는 간단한 예제 함수.

LIST