将BYTE[]中的字符的16进制形式作为字符串存入CString对象并返回

将BYTE[]中的字符的16进制形式作为字符串存入CString对象并返回:

C++ Code:

/*
	功能:将pMsgID中的字符的ASCII码以16进制表示成数字字符,存入retValue并返回
	@pMsgID:	源字符串
	@retValue:	保存返回值
*/
void GetMsgID(char pMsgID[], CString &retValue)
{
	BYTE *p = (BYTE*)pMsgID;
	BYTE temp[21];
	for(int i = 0; i < 20; i += 2)
	{
		temp[i] = (*p >> 4) + '0';		// 取高4位,并转换为数字字符
		temp[i+1] = (*p & 0x0F) + '0';	// 取低4位
		p++;
	}
	temp[20] = '\0';					// 置为字符串结束符
	retValue.Format("%s", temp);
}

 

注:上面的代码只取pMsgID中的前10字节的数据,具体可看情况修改。

### 将CString类型的16进制字符串换为字节数组 在C++中,可以利用`CString`类来处理字符串通过手动解析的方式将其换为字节数组。以下是具体的实现方法: #### 实现思路 1. 遍历`CString`中的字符,每两个字符表示一个十六进制数。 2. 使用标准库函数如`strtoul`或自定义逻辑将这两个字符换为其对应的十进制数值(即字节值)。 3. 将得到的字节存储到目标字节数组中。 #### 示例代码 以下是一个完整的示例代码片段,展示如何将`CString`类型的16进制字符串换为字节数组: ```cpp #include <atlstr.h> // 包含 CString 定义 #include <vector> #include <iostream> std::vector<unsigned char> CStringToByteArray(const CString& hexStr) { std::vector<unsigned char> byteArray; int length = hexStr.GetLength(); for (int i = 0; i < length; i += 2) { // 提取两位字符换为字节 TCHAR highChar = hexStr[i]; TCHAR lowChar = (i + 1 < length) ? hexStr[i + 1] : _T('0'); // 如果长度不足补零 unsigned char byteValue = 0; if (_istxdigit(highChar) && _istxdigit(lowChar)) { // 检查是否为合法十六进制字符[^1] byteValue = static_cast<unsigned char>( ((highChar >= 'A' && highChar <= 'F') ? (highChar - 'A' + 10) : (highChar >= 'a' && highChar <= 'f') ? (highChar - 'a' + 10) : (highChar - '0')) * 16 + ((lowChar >= 'A' && lowChar <= 'F') ? (lowChar - 'A' + 10) : (lowChar >= 'a' && lowChar <= 'f') ? (lowChar - 'a' + 10) : (lowChar - '0')) ); } byteArray.push_back(byteValue); } return byteArray; } void PrintByteArray(const std::vector<unsigned char>& byteArray) { for (unsigned char b : byteArray) { printf("%02X ", b); } printf("\n"); } // 测试部分 int main() { CString hexString = _T("48656C6C6F"); // 对应 "Hello" std::vector<unsigned char> result = CStringToByteArray(hexString); PrintByteArray(result); // 输出结果:48 65 6C 6C 6F return 0; } ``` 上述代码实现了从`CString`形式的十六进制字符串到字节数组的换过程。其中,`_istxdigit`用于验证字符是否属于有效的十六进制范围。 --- ### 注意事项 - 输入的`CString`必须是偶数长度,因为每个字节由两个十六进制字符组成。如果输入不是偶数长度,则需补充默认值(如上例中的`_T('0')`),或者抛出异常提示错误。 - 上述代码假设输入均为有效十六进制字符。实际应用中可能需要增加额外校验机制以提高健壮性。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值