如何将二进制字符串及一维字符串数组按每2位转十进制数值
实现方案
核心转换逻辑
先明确需求规则:
- 支持两种输入类型:空格分隔的二进制字符串、一维字符串数组(每个元素为独立二进制段)
- 每个独立二进制段从左到右每2位拆分为一组,每组转十进制后按顺序拼接为该段的转换结果
- 字符串输入的原始空格位置、数量全部保留,不做增减
分步实现逻辑
- 输入类型判断:如果是一维数组直接遍历每个元素转换;如果是字符串先拆分出空格段和二进制段,二进制段转换后按原顺序拼接
- 单二进制段转换步骤:
- 若二进制段长度为奇数,左侧补1个0凑成2的整数倍长度(如果需要右侧补0可自行调整补位逻辑)
- 从左到右按步长2拆分得到多个2位二进制分组
- 每个分组转十进制后转字符串,按顺序拼接得到最终结果
Python 代码实现
import re def convert_single_bin(bin_str: str) -> str: # 处理单个二进制段转换 length = len(bin_str) # 奇数长度左侧补0 if length % 2 != 0: bin_str = '0' + bin_str # 每2位拆分 groups = [bin_str[i:i+2] for i in range(0, len(bin_str), 2)] # 每组转十进制后拼接 return ''.join(str(int(g, 2)) for g in groups) def bin_convert(input_data): # 处理一维字符串数组输入 if isinstance(input_data, list): return [convert_single_bin(s) for s in input_data] # 处理字符串输入,保留原始空格 elif isinstance(input_data, str): # 正则拆分所有空格段和非空格段 parts = re.findall(r'(\s+|\S+)', input_data) res = [] for part in parts: res.append(part if part.isspace() else convert_single_bin(part)) return ''.join(res) else: raise TypeError("仅支持字符串或一维字符串数组类型输入") # 测试用例 if __name__ == "__main__": print(repr(bin_convert("10 1111 1010"))) # 输出 '2 33 22' print(repr(bin_convert(" 11 01 1010"))) # 输入1个空格开头则输出 ' 3 1 22',输入2个空格开头则输出对应双空格前缀 print(bin_convert(["10", "1111", "1010"])) # 输出 ['2', '33', '22']
内容的提问来源于stack exchange,提问作者Noriyuki
相关产品推荐
相关产品推荐

