实现将一个64位无符号整数(u64类型)从十六进制(hex)转换成十进制(u64 类型)
时间: 2024-09-09 11:04:10 浏览: 52
C语言 进制转换
在C/C++或其类似的语言中,你可以使用类似于下面的方式来实现将64位无符号整数从十六进制转换为十进制,通常需要借助字符串处理和按位操作:
```c++
#include <string>
#include <sstream>
u64 hex_to_decimal(const std::string &hex_str) {
// 创建istringstream对象,并设置基础字符串
std::istringstream iss(hex_str);
// 宽度适配读取u64,初始化结果
u64 decimal = 0;
// 读取每一位并计算进位
for (std::string::const_iterator it = hex_str.begin(); it != hex_str.end(); ++it) {
char digit = *it;
if (digit >= '0' && digit <= '9') {
decimal = decimal * 16 + digit - '0';
} else if (digit >= 'A' && digit <= 'F') {
decimal = decimal * 16 + digit - 'A' + 10;
} else if (digit >= 'a' && digit <= 'f') {
decimal = decimal * 16 + digit - 'a' + 10;
} else {
throw std::invalid_argument("Invalid hexadecimal character");
}
}
return decimal;
}
```
这段代码首先创建一个输入流(istringstream),然后逐个读取十六进制字符串中的字符,根据字符对应的十进制值(0-9对应自身,A-F/a-f分别对应10-15)累加到结果上。如果遇到非十六进制字符,则抛出异常。
阅读全文