C++实现字节数组与16进制字符串互转,字符串转16进制字符串

1 无符号字节数组转16进制字符串 

std::string bytesToHexString(const BYTE* bytes,const int length) 
{
	if (bytes == NULL) {
		return "";
	}
	std::string buff;
	const int len = length;
	for (int j = 0; j < len; j++) {
		/*if ((bytes[j] & 0xff) < 16) {
			buff.append("0");
		}*/
		int high = bytes[j]/16, low = bytes[j]%16;
		buff += (high<10) ? ('0' + high) : ('a' + high - 10);
		buff += (low<10) ? ('0' + low) : ('a' + low - 10);
	}
	return buff;
}

2 16进制字符串转无符号字节数组 

void hexToBytes(const std::string& hex,BYTE* bytes) 
{
	int bytelen = hex.length() / 2;
	std::string strByte;
	unsigned int n;
	for (int i = 0; i < bytelen; i++) 
	{
		strByte = hex.substr(i * 2, 2);
		sscanf(strByte.c_str(),"%x",&n);
		bytes[i] = n;
	}
}

字符串转16进制字符串 

/*
* 将字符串编码成16进制数字,适用于所有字符(包括中文)
*/
std::string encodeHexString(const std::string& str) {
	// 根据默认编码获取字节数组
	std::string hexString = "0123456789abcdef";
	string sb;
	// 将字节数组中每个字节拆解成2位16进制整数
	for (int i = 0; i < str.length(); i++) {
		sb += hexString.at((str[i] & 0xf0) >> 4);
		sb += hexString.at((str[i] & 0x0f) >> 0);
	}
	return sb;
}

16进制字符串转字符串 

std::string hexStringToString(const std::string& hexStr) 
{
	std::string ret;
	std::string hexString = "0123456789abcdef";
	// 将每2位16进制整数组装成一个字节
	for (int i = 0; i < hexStr.length(); i += 2)
		ret	+= BYTE(hexString.find(hexStr.at(i)) << 4 | hexString.find(hexStr.at(i + 1)));
	return ret;
}

 

  • 3
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
C++中,将16进制字符串换为char数组可以通过以下步骤实现: 1. 首先,将16进制字符串换为对应的整数值。可以使用`std::stoi`函数将字符串换为整数,需要指定基数为16。 2. 然后,将整数值换为对应的字符。可以使用类型换操作符`static_cast<char>`将整数值换为字符。 3. 最后,将换后的字符存储到char数组中。 下面是一个示例代码: ```cpp #include <iostream> #include <string> int main() { std::string hexString = "48656C6C6F20576F726C64"; // 16进制字符串 int length = hexString.length() / 2; // 字符串长度的一半 char* charArray = new char[length + 1]; // 创建char数组,长度为字符串长度的一半加1(用于存储字符串结束符'\0') charArray[length] = '\0'; // 设置字符串结束符 for (int i = 0; i < length; i++) { std::string byteString = hexString.substr(i * 2, 2); // 每两个字符作为一个字节处理 int byteValue = std::stoi(byteString, nullptr, 16); // 将16进制字符串换为整数 charArray[i] = static_cast<char>(byteValue); // 将整数换为字符 } std::cout << "换后的char数组: " << charArray << std::endl; delete[] charArray; // 释放内存 return 0; } ``` 请注意,上述示例代码中使用了动态内存分配来创建char数组,并在使用完毕后释放了内存。这是为了避免内存泄漏。另外,示例代码中假设输入的16进制字符串长度为偶数,如果长度为奇数,需要根据实际情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值