十六进制字符串 与十进制整数的转换 与 取模

十六进制字符串 与十进制整数的转换 与 取模

思路:首先是将十六进制的字符串转换成整数
那么可以写出如下的函数:

//将十六进制数转换为十进制数字,可能会溢出
int converHexToInteger(const string& str){
	int ans = 0;
	int hexBase = 16;
	for (int i=0; i<str.size(); ++i){
		int t = convertHexCharToInt(str[i]);
		ans = ans*hexBase + t;
	}
	return ans;
}

其中convertHexCharToInt()将十六进制字符转换为十进制数字。
但是MD5字符串很长时,int可能会溢出。
因此,最好是得到对某个整数的模。
取模时,也可以按照转换的思想,逐个字符进行取模。
当进行到下一位时,把当前的数字乘以base即16加上个位,然后再进行取模。即:

//十六进制取模
int modHexStr(const string& str, int mod){
	int ans = 0;
	int hexBase = 16;
	for (int i=0; i<str.size(); ++i){
		int t = convertHexCharToInt(str[i]);
		ans = (ans * 16 + t) % mod;
	}
	return ans;
}

总的代码及测试代码如下:

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

//将十六进制字符转换为 十进制数字  f->15   a->10   8->8
int convertHexCharToInt(char c){
	int t;
	if(c>='a' && c<='f'){
		t = c-'a' + 10;
	}else if (c>='0'&&c<='9'){
		t = c-'0';
	}else{
		t = 0;
	}
	return t;
}

//将十六进制数转换为十进制数字,可能会溢出
int converHexToInteger(const string& str){
	int ans = 0;
	int hexBase = 16;
	for (int i=0; i<str.size(); ++i){
		int t = convertHexCharToInt(str[i]);
		ans = ans*hexBase + t;
	}
	return ans;
}

//十六进制取模
int modHexStr(const string& str, int mod){
	int ans = 0;
	int hexBase = 16;
	for (int i=0; i<str.size(); ++i){
		int t = convertHexCharToInt(str[i]);
		ans = (ans * 16 + t) % mod;
	}
	return ans;
}

void main(){
	string md5 = "eb87";
	string md51 = "ff";
	int mod = 7;
	cout<<md5<<":"<<converHexToInteger(md5)<<endl; //eb87 = 60295
	cout<<md51<<":"<<converHexToInteger(md51)<<endl;  //ff = 255

	cout<<md5<<"%"<<mod<<":"<<modHexStr(md5, mod)<<endl; //60295%7 = 4
	cout<<md51<<"%"<<mod<<":"<<modHexStr(md51, mod)<<endl;//255%7 = 3
	cout<<60295%7<<endl;
	cout<<255%7<<endl;

	system("pause");
	return;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 用 Java 编写的十进制十六进制的代码实现可以使用 Integer.toHexString() 方法,它会接受一个整数,并将其转换为一个十六进制字符串表示。因此,要将一个十进制转换十六进制,只需使用以下语法:String hexString = Integer.toHexString(decimalNumber); ### 回答2: Java提供了多种方式将十进制转换十六进制。下面给出两种常用的实现方式。 第一种方式是使用Java的内置函实现。可以使用Integer类的toHexString方法将十进制转换十六进制字符串。示例如下: ```java int decimal = 255; // 十进制 String hexadecimal = Integer.toHexString(decimal); // 转换十六进制字符串 System.out.println(hexadecimal); // 输出结果为 "ff" ``` 第二种方式是自定义实现。可以通过不断地对十进制进行取模和除法运算来得到十六进制的每一位,并将其存储到一个字符组或字符串。示例如下: ```java int decimal = 255; // 十进制 char[] hexDigits = new char[16]; hexDigits[10] = 'A'; // 十六进制的"A" hexDigits[11] = 'B'; // 十六进制的"B" hexDigits[12] = 'C'; // 十六进制的"C" hexDigits[13] = 'D'; // 十六进制的"D" hexDigits[14] = 'E'; // 十六进制的"E" hexDigits[15] = 'F'; // 十六进制的"F" StringBuilder hexadecimal = new StringBuilder(); while (decimal > 0) { int remainder = decimal % 16; // 取模得到最低位的十六进制 hexadecimal.insert(0, hexDigits[remainder]); // 将最低位的十六进制插入到字符串的开头 decimal = decimal / 16; // 对十六进制进行除法运算 } System.out.println(hexadecimal.toString()); // 输出结果为 "FF" ``` 无论使用哪种方式,Java都提供了十进制十六进制的便捷实现,可以根据具体需求选择合适的方式来进行转换。 ### 回答3: 要将十进制转换十六进制,可以使用Java编程语言编写以下代码实现: ```java public class DecimalToHexadecimal { public static void main(String[] args) { int decimal = 255; // 用于示例的十进制 // 将十进制转换十六进制 String hexadecimal = decimalToHexadecimal(decimal); // 输出结果 System.out.println("十进制 " + decimal + " 转换十六进制为 " + hexadecimal); } public static String decimalToHexadecimal(int decimal) { StringBuilder sb = new StringBuilder(); while (decimal > 0) { int remainder = decimal % 16; // 取余 if (remainder < 10) { sb.append(remainder); // 如果余小于10,直接将其添加到结果字符串 } else { sb.append((char) ('A' + remainder - 10)); // 如果余大于10,将其转换为对应的字母添加到结果字符串 } decimal /= 16; // 除以16继续向下取整 } return sb.reverse().toString(); // 反转结果字符串并返回 } } ``` 在上述代码,我们定义了一个`decimalToHexadecimal`方法,它接受一个十进制作为参,并将其转换十六进制。在方法,我们使用了字符串构建器`StringBuilder`来动态构建结果字符串。在每一步迭代,我们通过取十进制除以16的余来获取十六进制的一位字。如果余小于10,则将其直接添加到结果字符串;如果余大于10,则将其转换为对应的字母(例如,10对应'A',11对应'B',依此类推)并将其添加到结果字符串。然后,我们将十进制除以16继续向下取整,并重复上述步骤,直到十进制变为0。最后,我们将结果字符串反转并作为方法的返回值。在主方法,我们使用一个示例十进制255来测试这个方法,并将结果打印到控制台

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值