[手游新项目历程]第6天-二进制值和十六进制字符串相互转换的C++代码

pushframework 只能处理字符串不能处理二进制啊,看能不能通过转换解决

#include <iostream>
#include <string>
#include <stdint.h>
#include <Windows.h>

using namespace std;

string BinToHex(const string &strBin, bool bIsUpper = false)
{
	string strHex;
	strHex.resize(strBin.size() * 2);
	for (size_t i = 0; i < strBin.size(); i++)
	{
		uint8_t cTemp = strBin[i];
		for (size_t j = 0; j < 2; j++)
		{
			uint8_t cCur = (cTemp & 0x0f);
			if (cCur < 10)
			{
				cCur += '0';
			}
			else
			{
				cCur += ((bIsUpper ? 'A' : 'a') - 10);
			}
			strHex[2 * i + 1 - j] = cCur;
			cTemp >>= 4;
		}
	}

	return strHex;
}

string HexToBin(const string &strHex)
{
	if (strHex.size() % 2 != 0)
	{
		return "";
	}

	string strBin;
	strBin.resize(strHex.size() / 2);
	for (size_t i = 0; i < strBin.size(); i++)
	{
		uint8_t cTemp = 0;
		for (size_t j = 0; j < 2; j++)
		{
			char cCur = strHex[2 * i + j];
			if (cCur >= '0' && cCur <= '9')
			{
				cTemp = (cTemp << 4) + (cCur - '0');
			}
			else if (cCur >= 'a' && cCur <= 'f')
			{
				cTemp = (cTemp << 4) + (cCur - 'a' + 10);
			}
			else if (cCur >= 'A' && cCur <= 'F')
			{
				cTemp = (cTemp << 4) + (cCur - 'A' + 10);
			}
			else
			{
				return "";
			}
		}
		strBin[i] = cTemp;
	}

	return strBin;
}

int main()
{
	string strBin = "!@#$%^&*()_+~`1234567890-=";
	string strHex = "21402324255E262A28295F2B7E60313233343536373839302D3D";

	string strBinToHex = BinToHex(strBin);
	cout << strBinToHex << endl;
	strBinToHex = BinToHex(strBin, true);
	cout << strBinToHex << endl;

	string strHexToBin = HexToBin(strHex);
	cout << strHexToBin << endl;
	system("pause");
	return 0;
}
点击打开链接
#include "stdio.h"
#include "string.h"
#include <Windows.h>
#include <iostream>
using namespace std;

int Bytes2String(unsigned char *pSrc, int nSrcLen, unsigned char *pDst, int nDstMaxLen)   
{   
	if (pDst != NULL)
	{
		*pDst = 0;
	}

	if (pSrc == NULL || nSrcLen <= 0 || pDst == NULL || nDstMaxLen <= nSrcLen*2)
	{
		return 0;
	}

	//0x0-0xf的字符查找表 
	const char szTable[] = "0123456789ABCDEF";    
	for(int i=0; i<nSrcLen; i++)   
	{   
		//输出低4位   
		*pDst++ = szTable[pSrc[i] >> 4];   
		// 输出高4位   
		*pDst++ = szTable[pSrc[i] & 0x0f];   
	}   
	// 输出字符串加个结束符   
	*pDst = '/0';   
	//返回目标字符串长度   
	return  nSrcLen * 2;   
} 
int String2Bytes(unsigned char* szSrc, unsigned char* pDst, int nDstMaxLen)   
{
	if(szSrc == NULL)
	{
		return 0;
	}
	int iLen = strlen((char *)szSrc);
	if (iLen <= 0 || iLen%2 != 0 || pDst == NULL || nDstMaxLen < iLen/2)
	{
		return 0;
	}

	iLen /= 2;
	strupr((char *)szSrc);
	for (int i=0; i<iLen; i++)
	{
		int iVal = 0;
		unsigned char *pSrcTemp = szSrc + i*2;
		sscanf((char *)pSrcTemp, "%02x", &iVal);
		pDst[i] = (unsigned char)iVal;
	}

	return iLen;
} 

int main(int argc, char* argv[])
{
	unsigned char s1[128] = "2F17211111222233334444";
	unsigned char s2[128] = {0};
	unsigned char s3[128] = {0};
	int l = String2Bytes(s1, s2, 128);
	cout<<s2<<endl;
	Bytes2String(s2, l, s3, 128);
	cout<<s3<<endl;
	system("pause");
	return 0;
}
点击打开链接

原文地址:https://www.cnblogs.com/byfei/p/14104296.html