zoukankan      html  css  js  c++  java
  • [手游新项目历程]第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;
    }
    点击打开链接

  • 相关阅读:
    第九周学习进度
    用户场景描述
    第九天
    第10天
    求两个有序数组的中值
    计算字符串中最长子字符串的长度
    计算两个数之和
    将string 转int
    判断一个int 型整数 是否为回文数
    php 对象的一些特性
  • 原文地址:https://www.cnblogs.com/byfei/p/14104296.html
Copyright © 2011-2022 走看看