【问题标题】:Creating a 6 bit crc using boost使用 boost 创建 6 位 crc
【发布时间】:2013-04-25 17:03:53
【问题描述】:

我是 CRC、boost 和更多的 Java 开发人员。我正在尝试使用 crc.hpp boost 库创建一个仅基于两位计算的 6 位 crc。首先这可能吗?

似乎理论 CRC 计算机可用于处理特定数量的位,但我不清楚如何指定 6 位结果。请帮忙。

【问题讨论】:

  • 为什么你的结果会比你的输入大?
  • 同意有点不寻常。但是,我只是遵循 msg 类型的标头规范。我对此提出了质疑,只是被告知我们无法更改该值。
  • 这条评论彻底改变了这个问题。您不是在尝试计算 a 6 位 CRC。听起来您需要计算标头规范所需的 6 位 CRC。有许多可能的 6 位 CRC,具有不同的多项式、初始化值、后处理、输入位排序和输出位排序。那么规范是怎么说的呢?
  • 是的,你是对的。但是,规范现在已更改。 2 位数据现在将用 6 位填充,8 位 crc 将基于 8 位数据创建。再次,非常感谢。

标签: c++ boost crc


【解决方案1】:

假设您的输入基于 2 个实际位而不是两个字节,这应该有效:

const int initial_remainder = 0xBAADF00D;

unsigned char input = 0x3;

boost::crc_basic<6> checksum(initial_remainder);
checksum.process_bits(input, 2);

printf("%i", checksum.checksum());

不过,您仍然需要弄清楚最初的余数应该是多少。

【讨论】:

  • 是的,两位不是字节,让我试一试。谢谢!
  • 此代码有效,但我的校验和结果似乎不正确。我得到单个字符的结果或什么都没有。也许我仍然缺少一些东西。
  • @user1464251 除非您给我们预期的结果,否则我们无法完全回答。您的初始余数完全有可能不正确,导致此问题。
【解决方案2】:

这应该只是一个最大化四个字节值之间的汉明距离的自定义代码。这将是一个由 0..3 中的两个位索引的四个 8 位值的表。

使四个值中任意两个之间的最小汉明距离最大化的一组值(有 280 个这样的组)是:0x00, 0x4f, 0xb3, 0xfc。最小汉明距离为 5。这些值的高两位是按顺序排列的两位索引。

【讨论】:

  • 我不确定我完全理解你在说什么。我理解汉明距离的概念。因为我只关心 2 位,所以 5 的汉明距离超出了我的要求,很好。当您声明“在四个字节值之间”时,我不明白您的意思。为什么是四个字节?我很清楚索引它们。还有,你是怎么得到280个这样的集合的?
  • 2 位有四个可能的值。您正在映射到 8 位值(表示为 2 位数据加上 6 位 CRC),因此映射到四个字节。
  • 暴力搜索会找到 280 个排序集,其中第一个字节为零。您可以排除或所有具有相同值的字节来获得具有相同汉明距离的其他集合,因此确实有更多集合。无论如何,您只需要一套。
猜你喜欢
  • 2020-11-23
  • 2018-11-18
  • 2011-02-04
  • 1970-01-01
  • 2015-12-07
  • 2022-11-17
  • 1970-01-01
  • 2017-01-23
  • 2011-05-04
相关资源
最近更新 更多