如何获取指定范围内的所有十六进制数?
获取指定范围内所有十六进制数的方法
核心逻辑很简单:先把十六进制的起始/结束值转换成十进制整数,遍历这个整数区间,再将每个整数转回十六进制格式即可。以下是几种主流编程语言的实现示例:
Python 实现
Python的hex()函数可以直接将整数转为十六进制字符串,结合列表推导式快速生成结果,还能通过格式化字符串自定义输出样式。
示例1:生成0x00到0xFFF的十六进制数
start = 0x00 # 等价于 int("0x00", 16) end = 0xFFF # 等价于 int("0xFFF", 16) # 生成带0x前缀的小写十六进制列表 hex_list = [hex(num) for num in range(start, end + 1)] # 生成固定4位、大写无前缀的十六进制列表 hex_upper_no_prefix = [f"{num:04X}" for num in range(start, end + 1)]
示例2:生成0xAB到0xFEFF的十六进制数
start = 0xAB end = 0xFEFF # 自定义格式:带0X前缀、补全到4位大写 hex_custom = [f"0X{num:04X}" for num in range(start, end + 1)]
JavaScript 实现
用parseInt()转十六进制为十进制,循环遍历后通过toString(16)转回十六进制,配合padStart()补前导零。
示例1:生成0x00到0xFFF的十六进制数
const start = 0x00; // 等价于 parseInt("0x00", 16) const end = 0xFFF; const hexNumbers = []; for (let num = start; num <= end; num++) { // 生成带0x前缀、补3位小写的结果 hexNumbers.push(`0x${num.toString(16).padStart(3, '0')}`); }
示例2:生成0xAB到0xFEFF的十六进制数
const start = 0xAB; const end = 0xFEFF; const hexList = []; for (let n = start; n <= end; n++) { // 生成无前缀的大写十六进制字符串 hexList.push(n.toString(16).toUpperCase()); }
C++ 实现
通过std::stoul()将十六进制字符串转整数,用std::stringstream结合格式化控制输出十六进制格式。
示例:生成0xAB到0xFEFF的十六进制数
#include <iostream> #include <vector> #include <sstream> #include <iomanip> int main() { unsigned int start = 0xAB; // 等价于 std::stoul("0xAB", nullptr, 16) unsigned int end = 0xFEFF; std::vector<std::string> hexNumbers; for (unsigned int num = start; num <= end; ++num) { std::stringstream ss; // 格式化输出:带0x前缀、补4位、大写 ss << "0x" << std::hex << std::setw(4) << std::setfill('0') << std::uppercase << num; hexNumbers.push_back(ss.str()); } // 打印前10个结果示例 for (size_t i = 0; i < 10; ++i) { std::cout << hexNumbers[i] << " "; } return 0; }
注意事项
- 边界处理:遍历要包含结束值,Python的
range是左闭右开,所以要写range(start, end + 1);其他语言循环条件用num <= end。 - 格式定制:根据需求选择是否带前缀、大小写、补前导零,不同语言的格式化语法略有差异。
- 性能优化:如果范围极大(比如0x0到0xFFFFFFFF),避免一次性生成所有元素,改用迭代器或按需生成,减少内存占用。
内容的提问来源于stack exchange,提问作者Ichigo Kurosaki
相关产品推荐
相关产品推荐

