C/C++函数十六进制字符串转字节流

void HexStrToByte(const char* source, size_t sourceLen, void* dest)
{
	int highByte, lowByte; size_t i;
	for (i = 0; i < sourceLen; i += 2)
	{
		highByte = (int)source[i];
		lowByte = (int)source[i + 1];
		/*转换高位*/
		if (highByte > 0x39)
		{
			if (highByte < 0x47)
				highByte -= 0x37;//大写
			else
				highByte -= 0x57;//小写
		}
		else
			highByte -= 0x30;
		/*转换低位*/
		if (lowByte > 0x39)
		{
			if (lowByte < 0x47)
				lowByte -= 0x37;
			else
				lowByte -= 0x57;
		}
		else
			lowByte -= 0x30;
		((char *)dest)[i / 2] = (char)((highByte << 4) | lowByte);
	}
}

source为字符串指针
sourceLen为字符串长度,可用strlen函数获得
dest为结果缓冲区,至少需要(sourceLen / 2)的空间,才能保证无内存越界
此版本基于他人版本修改,无编译警告,兼容老式C编译器

发布了1 篇原创文章 · 获赞 0 · 访问量 104

猜你喜欢

转载自blog.csdn.net/u011486334/article/details/104090766