由0/1或0/F组成的十六进制转二进制表示形式转换需求
两种特殊十六进制转换需求的实现方案
嘿,我来帮你搞定这两个有点特殊的十六进制转换需求,每个需求我都会讲清楚逻辑、示例,再给你实用的代码实现思路(以Python为例,毕竟它处理进制转换很顺手):
1. 由0和1组成的十六进制数转二进制等效值
这个需求很直接:把仅包含0和1的十六进制数,转换成它对应的数值等效二进制表示。因为十六进制的每一位对应4位二进制,本质上就是把十六进制数的数值转成二进制字符串即可。
示例
- 输入:
0x0101(十进制257) - 输出:
0b100000001(如果需要保留完整的16位前导零,结果为0b0000000100000001)
代码实现
# 定义输入的十六进制数 hex_num = 0x0101 # 获取标准二进制表示(自动去掉前导零) binary_eq = bin(hex_num) print(binary_eq) # 输出: 0b100000001 # 如果需要保留和十六进制位数一致的二进制位(比如16位) binary_padded = format(hex_num, '016b') print(f"0b{binary_padded}") # 输出: 0b0000000100000001
2. 将仅含0/F的十六进制数转换为代表其二进制映射的十六进制数
这个需求的逻辑稍微绕一点,核心是把十六进制的每一位字符当成二进制位映射:F替换成1,0替换成0,得到一个二进制字符串后,再把这个二进制字符串转换成十六进制数。
规则与示例
- 规则:输入的十六进制数仅由0和F(大小写均可)组成,先将每一位替换为二进制位(F→1,0→0),再将得到的二进制字符串转为十六进制。
- 示例1:输入
0x0101,将每一位0/1直接作为二进制位得到0101,转十六进制就是0x5 - 示例2:输入
0xf00f,替换F为1后得到二进制字符串1001,转十六进制就是0x9
代码实现
def hex_to_binary_mapped_hex(input_hex): # 把十六进制数转成小写字符串(去掉前缀0x) hex_str = hex(input_hex)[2:].lower() # 替换每一位:f→1,0→0 bin_str = ''.join('1' if c == 'f' else '0' for c in hex_str) # 把二进制字符串转成十六进制 mapped_hex = hex(int(bin_str, 2)) return mapped_hex # 测试示例 print(hex_to_binary_mapped_hex(0x0101)) # 输出: 0x5 print(hex_to_binary_mapped_hex(0xf00f)) # 输出: 0x9
内容的提问来源于stack exchange,提问作者Jeremy Pare
相关产品推荐
相关产品推荐

