c++ 十六进制字符串转换二进制字符串, 二进制在转换十进制


#include <stdio.h>;
#include <string.h>;
#include <stdlib.h>;

/*
*        10进制字符转成16进制字符
*/
int strDec2Hex(char* sDec, int iDecLen, char* sHex, int iHexLen)
{
	char sSrc[65];
	char sForamt[6];
	unsigned long ulSrc;
	memset(sSrc, 0, sizeof(sSrc));
	memcpy(sSrc, sDec, iDecLen);
	ulSrc = atol(sSrc);
	sprintf(sForamt, "%%0%dX", iHexLen);
	_snprintf(sHex, iHexLen, sForamt, ulSrc);
	return ulSrc;
}
/*
*        2进制字符转成16进制字符
*/
int strBin2Hex(char* sBin, int iBinLen, char* sHex, int iHexLen)
{
	char sSrc[65];
	char sForamt[6];
	unsigned long ulSrc;
	memset(sSrc, 0, sizeof(sSrc));
	memcpy(sSrc, sBin, iBinLen);
	*(sSrc + 0) == '1' ? ulSrc = 1 : ulSrc = 0;
	for (int i = 1; i < iBinLen; i++)
		*(sSrc + i) == '1' ? ulSrc = ulSrc * 2 + 1 : ulSrc = ulSrc * 2 + 0;
	sprintf(sForamt, "%%0%dX", iHexLen);
	_snprintf(sHex, iHexLen, sForamt, ulSrc);
	return ulSrc;
}

/*
*        16进制字符转成10进制字符
*/
int strHex2Dec(char* sHex, int iHexLen, char* sDec, int iDecLen)
{
	char sSrc[65];
	char sForamt[6];
	unsigned long ulSrc;
	memset(sSrc, 0, sizeof(sSrc));
	memcpy(sSrc, sHex, iHexLen);
	strupr(sSrc);
	*(sSrc + 0) < 'A' ? ulSrc = *(sSrc + 0) - 0x30 : ulSrc = *(sSrc + 0) - 0x41 + 0x0A;
	for (int i = 1; i < iHexLen; i++)
		*(sSrc + i) < 'A' ? ulSrc = ulSrc * 16 + *(sSrc + i) - 0x30 : ulSrc = ulSrc * 16 + *(sSrc + i) - 0x41 + 0x0A;
	sprintf(sForamt, "%%0%du", iDecLen);
	_snprintf(sDec, iDecLen, sForamt, ulSrc);
	return ulSrc;
}

/*
*        16进制字符转成2进制字符
*/
int strHex2Bin(const char* sHex, int iHexLen, char* sBin, int iBinLen)
{
	char sSrc[65];
	char sForamt[6];
	unsigned long ulSrc;
	memset(sSrc, 0, sizeof(sSrc));
	memcpy(sSrc, sHex, iHexLen);
	*(sSrc + 0) < 'A' ? ulSrc = *(sSrc + 0) - 0x30 : ulSrc = *(sSrc + 0) - 0x41 + 0x0A;
	for (int i = 1; i < iHexLen; i++)
		*(sSrc + i) < 'A' ? ulSrc = ulSrc * 16 + *(sSrc + i) - 0x30 : ulSrc = ulSrc * 16 + *(sSrc + i) - 0x41 + 0x0A;
	sprintf(sForamt, "%%0%dd", iBinLen);
	memset(sSrc, 0, sizeof(sSrc));
	ultoa(ulSrc, sSrc, 2);
	sprintf(sForamt, "%%0%ds", iBinLen);
	_snprintf(sBin, iBinLen, sForamt, sSrc);
	return ulSrc;
}

//十六进制转换二进制

void main()
{
	const char* sHex = "83";
	int iHexLen = 2;
	char* sBin = new char[9];
	memset(sBin, 0, 9);
	int iBinLen = 9;
	int iR = strHex2Bin(sHex, 2, sBin, 8);
	cout << iR << endl;
	cout << sBin << endl;
	string strBin(sBin);
	string strsBin = strBin.substr(1, 7);

	int ii = strtol(strsBin.c_str(), NULL, 2);

	printf("ii=%d\n", ii);

	system("pause");
}
string strBin(sBin);
	string strsBin = strBin.substr(1, 7);

	int ii = strtol(strsBin.c_str(), NULL, 2);

	printf("ii=%d\n", ii);

//二进制转换十进制

 

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值