如何计算二进制字符串的奇偶校验并按26位Wiegand格式添加?
26位Wiegand格式二进制字符串的奇偶校验位计算与添加
嘿,我来帮你搞定26位Wiegand格式的奇偶校验位计算和添加问题!咱们先把规则掰扯清楚,再用你给的示例一步步演示,最后还能给你个实用的代码实现~
核心规则回顾
26位Wiegand格式的校验逻辑非常明确:
- 第1位(开头的X):是第2到13位的偶校验位——简单说,就是让第1到13位里
1的总数是偶数。如果第2-13位的1个数已经是偶数,X就是0;要是奇数,X就设为1。 - 第26位(结尾的Y):是第14到25位的奇校验位——要求第14到26位里
1的总数是奇数。如果第14-25位的1个数是奇数,Y就是0;要是偶数,Y就设为1。
示例实操步骤
拿你给出的原二进制字符串1111 1011 0111 0111 1111 1010来实际计算:
- 预处理:先去掉所有空格,得到24位核心数据:
111110110111011111111010 - 计算开头的偶校验位X:
- 取前12位:
111110110111 - 数里面
1的个数:一共10个(是偶数) - 所以偶校验位X为
0(保证前13位总1数还是偶数)
- 取前12位:
- 计算结尾的奇校验位Y:
- 取后12位:
011111111010 - 数里面
1的个数:一共9个(是奇数) - 所以奇校验位Y为
0(保证后13位总1数还是奇数)
- 取后12位:
- 拼接结果:把X放开头,Y放结尾,再按4位分组加空格,最终得到:
0 1111 1011 0111 0111 1111 1010 0
通用实现代码(Python)
如果需要批量处理或者自动化计算,这段代码可以直接用:
def compute_wiegand26_parity(binary_str): # 预处理:清理空格,验证长度 cleaned = binary_str.replace(" ", "") if len(cleaned) != 24: raise ValueError("原二进制字符串必须是24位(含空格的话是6组4位)") # 计算偶校验位(第1位) first_12 = cleaned[:12] even_parity = '0' if first_12.count('1') % 2 == 0 else '1' # 计算奇校验位(第26位) last_12 = cleaned[12:] odd_parity = '0' if last_12.count('1') % 2 == 1 else '1' # 格式化为易读的分组形式 full_26 = even_parity + cleaned + odd_parity formatted = f"{full_26[0]} " + " ".join([full_26[i:i+4] for i in range(1, 26, 4)]) return formatted # 测试你的示例 original = "1111 1011 0111 0111 1111 1010" result = compute_wiegand26_parity(original) print(f"原字符串:{original}") print(f"带校验位的26位Wiegand字符串:{result}")
运行这段代码后,输出和我们手动计算的结果完全一致~
内容的提问来源于stack exchange,提问作者myke
相关产品推荐
相关产品推荐

