检查某个二进制字符串是否等于十六进程表示的字符串

本文介绍如何检查二进制字符串是否等同于其对应的十六进制表示,通过将字符串转换为十进制数值进行比较。文章提供三个关键函数的实现:相等判断、进制转换和字符转数字。
摘要由CSDN通过智能技术生成



可以将两个字符串序列转换为10进制进行比较。


一共实现三个函数

1. 判断是否相等

2. 将2或16进制转为1进制

3. 将一个字符c转为数字



参考代码:

#include <iostream>
#include <string>
#include <cmath>
using namespace std;

// 比较
bool CompareBin_Hex(const string& binary, string& hex);

// 将字符转为数字
static int CharToDigit(char c);

// 将二进制或十六进制转为十进制
static int ConvertToBase(const string& str, int base);

// 比较
bool CompareBin_Hex(const string& binary, string& hex)
{
	if (binary.empty() || hex.empty())
		return false;

	int n1 = ConvertToBase(binary, 2);
	int n2 = ConvertToBase(hex, 16);

	if (n1 < 0 || n2 < 0)
		return false;

	if (n1 == n2)
		return true;
	return false;
}


// 将二进制或十六进制转为十进制
static int ConvertToBase(const string& str, int base)
{
	// 从最后一位开始算起
	int end = str.size() - 1;
	int value = 0;
	
	for (int index = end; index >= 0; index--)
	{
		int num = CharToDigit(str[index]);
		if (num < 0 || num >= base) // num>=base 超出该进制的范围
			return -1;
		// 指数最后一位从0开始
		int exp = end - index;
		value += num * pow(base, exp);
	}
	return value;
}

// 将字符转为数字
static int CharToDigit(char c)
{
	if (isdigit(c))
		return c - '0';
	else if (c <= 'F' && c >= 'A')
		return c - 'A' + 10;
	else if (c <= 'f' && c >= 'a')
		return c - 'a' + 10;

	return -1;
}


void TestComBinHex()
{
	string bin1 = "1111";
	string hex1 = "F";
	cout << boolalpha << CompareBin_Hex(bin1, hex1) << endl; // true
	string bin2 = "10101011";
	string hex2 = "AB";
	string hex3 = "QQ";
	cout << boolalpha << CompareBin_Hex(bin1, hex1) << endl; // true
	cout << boolalpha << CompareBin_Hex(bin2, hex2) << endl; // true
	cout << boolalpha << CompareBin_Hex(bin2, hex3) << endl; // false
}

int mian()
{
	TestComBinHex();
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值