快速CRC算法?

2024-04-22

我想从 ASCII 字符串创建一个 32 位数字。 CRC32 算法正是我正在寻找的,但我无法使用它,因为它需要的表太大了(它适用于资源非常稀有的嵌入式系统)。

那么:对于快速且精简的 CRC 算法有什么建议吗?当冲突的可能性比原始 CRC32 更高时,这并不重要。


CRC 实现使用表来提高速度。它们不是必需的。

这是一个简短的 CRC32,使用 Castagnoli 多项式(与 Intel crc32 指令使用的相同)或以太网多项式(与 zip、gzip 等中使用的相同)。

#include <stddef.h>
#include <stdint.h>

/* CRC-32C (iSCSI) polynomial in reversed bit order. */
#define POLY 0x82f63b78

/* CRC-32 (Ethernet, ZIP, etc.) polynomial in reversed bit order. */
/* #define POLY 0xedb88320 */

uint32_t crc32c(uint32_t crc, const unsigned char *buf, size_t len)
{
    int k;

    crc = ~crc;
    while (len--) {
        crc ^= *buf++;
        for (k = 0; k < 8; k++)
            crc = crc & 1 ? (crc >> 1) ^ POLY : crc >> 1;
    }
    return ~crc;
}

最初的crc值应该为零。可以使用数据块连续调用该例程来更新 CRC。您可以展开内部循环以提高速度,尽管您的编译器可能会为您执行此操作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

快速CRC算法? 的相关文章

  • Lambda、封闭变量、显示类、可序列化性和流行层

    我已经为 Compact Framework 实现了一个流行层 包括BinaryFormatter 类似序列化器 我希望能够在适当的情况下序列化编译器生成的类 这些类是由 lambda 和迭代器等产生的 这样如果 例如 lambda 及其封
  • 如何更改 GridView 内 ListViewItemPresenter 中的 SelectedBackground

    我在 SubSection 中有一个 Clickable Gridview
  • 正确别名向量

    我无法在其他地方找到答案 所以我想我只需要问这个 我正在尝试获取向量 其中存储 int 指针 的别名 如下所示 void conversion Engine ENGINES The Engine class has a vector of
  • 如何在 Xamarin.Forms 中强制使用浅色模式?

    我的应用程序的 UI 设计为在灯光模式下使用 但如果手机的默认主题是深色模式 我的应用程序也会切换到深色模式 并且 UI 看起来很垃圾 所以我想强制我的应用程序使用灯光模式 我怎样才能做到这一点 In my app xaml我使用的文件Us
  • 有没有一种方法可以在不测试整个应用程序的情况下对类库(通用 Windows)进行单元测试?

    我需要进行单元测试Class Library Universal Windows 但是从 添加新项目 窗口中 我只看到了这一点 该项目使用应用程序容器运行所有测试 它始终打开一个应用程序 由于我不需要所有这些开销 我想知道是否有一种方法可以
  • 如何对具有无效值的属性使用 JSON.net 的默认值

    我正在使用 Newtonsoft JSON 库来反序列化来自 Web 服务的响应 问题是某些字段包含无效值 例如 一条记录上的一个字段包含一个 T 表示该字段应该是数字 我想做的是将无效字段的值设置为 null 或其他默认值 我的所有属性都
  • 如何获取 TFS 2013 中所有用户的列表

    我正在使用 Team Foundation Server TFS 2013 和 Visual studio 2012 我需要 TFS 中所有用户的列表 有没有办法使用C 获取TFS中的所有用户 从TFS 2010获取用户列表 您可以尝试使用
  • 独立于符号的字符串的模式匹配

    我需要一种算法 可以在数据中找到预定义的模式 以字符串的形式存在 独立于数据和模式的实际符号 字符 我只关心符号之间的关系 而不关心符号本身 数据中的同一符号具有不同的模式符号也是合法的 模式匹配算法必须强制执行的唯一一件事是保留模式中同一
  • 二叉树实现C++

    二叉树插入 include stdafx h include
  • 为什么这是一个未定义的行为?

    我的回答这个问题 https stackoverflow com q 18706587 845092这个函数是 inline bool divisible15 unsigned int x 286331153 2 32 1 15 40086
  • 产量回报延迟迭代问题

    我知道yield return 利用了延迟加载 但我想知道我是否可能滥用迭代器或者很可能需要重构 我的递归迭代器方法返回给定的所有祖先PageNode包括pageNode itself public class PageNodeIterat
  • 宏中 do { } while(0) 与 ({ }) 的优点?

    Stack Overflow 上有很多关于使用的问题do while 0 在宏中 但这有点不同 我明白为什么do while 0 用于将多行代码包装在宏扩展中 但我经常看到另一种形式 The form 的优点是它是一个表达式并且可以有 返回
  • 天气预报算法多样

    目前 英国气象局的预测引发了一场巨大的 风暴 他们预测冬季将是温和 潮湿的冬季 而北爱尔兰的气温却是有记录以来最冷的 地面上有厚厚的积雪 这在 12 月通常很少见 这是我很想尝试的东西 并不是我声称我可以击败他们 而是想知道人们目前正在使用
  • 使用全局 Web API 过滤器属性进行 Unity 依赖注入

    参考这个CodePlex 统一文章 http unity codeplex com discussions 446780我能够使用 WebAPI 控制器获取过滤器属性 如下所示 MyFilterAttribute public class
  • 如何将多个矩形打包为 2d 盒子俄罗斯方块样式

    我有许多不同宽度和高度的矩形 我有一个更大的矩形平台来放置它们 我想将它们包装在平台的一侧 以便它们在纵向 X 尺寸上展开 但将横向 Y 尺寸保持在最小限度 就是把它们像俄罗斯方块游戏一样放置 不能有重叠 但可以有间隙 有没有算法可以做到这
  • C# - 平移光标

    我正在 PictureBox 控件中实现大图像的平移 并且设置适当的方向平移光标没有问题 但是 我似乎找不到用于平底锅原点的图像 内部带有箭头的圆圈 我在哪里可以找到它 我觉得image您正在寻找的内容未包含在框架中 每个应用程序都使用自己
  • 虚拟键盘(类似 Swype 键盘)Windows 窗体应用程序 C#

    我正在尝试使用 c 在 Windows 窗体中创建一个类似 swype 的键盘 我有两个问题 A 我无法重现手指滑动动作 b 我无法识别不同按键下的字母 对于第一个问题 我使用了 Graphics 类和 Pen 类 并像这样使用它 bool
  • 如何让c代码执行hex机器代码?

    我想要一个简单的 C 方法能够在 Linux 64 位机器上运行十六进制字节码 这是我的 C 程序 char code x48 x31 xc0 include
  • 我该怎么做才能完全关闭与mcu的tcpClient连接?

    我现在正在研究与 ESP32 中运行的 tcp 服务器的 tcp 套接字连接 通信工作正常 但我无法关闭连接 在搜索关闭 重置 tcpClient 上的解决方案后 似乎关闭 tcpClient 的正确方法应该是 tcpClient GetS
  • XslCompiledTransform 和自定义 XmlUrlResolver:“具有相同键的条目已存在”

    有没有办法调试由自定义 XmlUrlResolver 从数据库加载的 XSLT 文档 或者有人知道下面的错误消息是关于什么的吗 我有一个导入通用 xslt 文档的 XSLT 样式表

随机推荐

  • 使用 Angular 5 和 RxJS 观察带有过滤器的数组

    我正在创建一个简单的论坛 我正在寻找过滤帖子 我在 RxJS 中使用 pipe 和 filter 时遇到一些问题 我试图 从内存中检索 api 帖子列表api posts 当与 http get 一起使用时 它返回一个Observable
  • Android appbarlayout 海拔出现在状态栏中

    如何消除状态栏中的高度 如果我在 AppbarLayout 中将 app elevation 设置为 0dp 则标高不再出现在状态栏中 但也不会出现在 AppbarLayout 下方 如何获取 AppbarLayout 下的高度 这是我的意
  • Rails/Devise - 我应该使用 devise 和 rspec 测试什么?

    许多程序员使用 devise 作为他们的身份验证解决方案 我想得到他们的建议 设计已经经过测试 但我想知道是否需要自己测试一些东西 集成 单元 功能测试 以便与我的知识进行标准设计集成 我不熟悉shoulda和cucumber 但我了解一些
  • 在 HTML 中正确对齐图像和文本

    This is the example 我想对齐image与名称并排 但不知何故 图像只是浮得更高一点 有什么帮助吗 UPDATE profile name header background color 006400 font famil
  • NPM5,package-lock.json 与 package.json 有什么区别?

    将NPM更新到版本5后 我发现package lock json包含 package json 的文件 这两个文件有什么区别 有什么优点package lock json package json 文件 列出您的项目所依赖的包 允许您使用语
  • 如何检查 iPhone 上的自定义 url 方案?

    我想在我的应用程序中使用自定义 url 方案 例如调用 navigons mobile navigator 首先 我想检查是否安装了 navigon 或者至少检查自定义 url 方案 navigon 是否已注册 有任何想法吗 多谢 看看 U
  • C 函数堆栈布局

    我有一个看起来像这样的函数 int bof char str char buffer 12 strcpy buffer str return 1 我正在尝试覆盖其返回地址 我发现我可以通过使用来做到这一点 例如 memcpy buffer
  • 使用 DTO 和 BO

    我对 DTO BO 的疑问之一是何时传递 返回 DTO 以及何时传递 返回 BO 我的直觉告诉我始终将 NHibernate 映射到 DTO 而不是 BO 并且始终传递 返回 DTO 然后 每当我需要执行业务逻辑时 我都会将 DTO 转换为
  • 在predict.lm()中使用聚类协方差矩阵

    我正在分析一个数据集 其中数据聚集在多个组 区域中的城镇 中 数据集如下所示 R gt df lt data frame x rnorm 10 y 3 rnorm x groups factor sample c 0 1 10 TRUE R
  • 如何调试 Heroku 请求超时错误

    我如何找出导致 heroku 上 h12 超时错误的原因 它在不同的页面 控制器上随机发生 这是我从日志中得到的错误 Processing by UsersController new as HTML 2013 08 15T13 08 54
  • 使用 script/api 更改组件服务 > COM 安全中的访问权限?

    是否有一个 api 可以更改 COM 安全的访问权限 我需要将新值写入 编辑限制 和 编辑默认值 这些是普通的注册表设置吗 找不到如何设置这些条目 快速答案是是 它们是注册表设置 长答案是否 它们不是simple注册表设置 这些值是二进制的
  • 确定线段是否与多边形相交

    如果我在 2D 平面上有一个向量 由 2 个点组成的线 我如何确定它是否穿过多边形 我知道我可以采用构成多边形的每条线并查看是否有相交 但有更好的方法吗 我读过这篇文章如何确定 2D 点是否在多边形内 https stackoverflow
  • 如何从 Swift 3 中的文本视图中删除查找和共享

    我可以使用它删除剪切 复制 粘贴 选择 选择所有内容 override public func canPerformAction action Selector withSender sender Any gt Bool if action
  • 在sqlalchemy中跨不同模块访问相同的db.session

    我对 sqlalchemy 非常陌生 正在尝试找出如何让事情变得更干净和连接 我创建了一个 model base py 文档 在其中创建了一个会话并在表中建立了所有实体 以及关系等 我想创建另一个模块 在其中对 base py 中的实体 表
  • 如果列数据重复,mysql 不会对行进行两次计数

    我正在计算名为 mysql 表的行数ptb profile views 我的桌子看起来像这样 id profile id viewed profile id date time 1 1 6 2 2 6 3 2 6 4 2 6 5 3 6 目
  • pygame初始化framebuffer或x服务器

    我有一个类检查合适的帧缓冲区 它工作得很好 一对计算机 主要是嵌入式旧板 没有帧缓冲区 所以我删除了init self 函数并手动将其设置为在 X 下运行 两种方式都可以在各自的系统上运行 我只是厌倦了每次进行更改时都将其移植 这是工作帧缓
  • 为什么括号会减慢我的 R 程序速度

    我在朋友的代码中发现了一些多余的括号 这确实减慢了执行时间 如果对此有什么解释的话 请查看这个示例代码 Python 也是一种 quesi 解释语言 不会受到此程序的影响 0 370 seconds x lt 0 while x lt 10
  • 尝试将我的应用程序添加到系统设置 -> 隐私和安全 -> 辅助功能列表是应用程序崩溃的原因

    我有一些应用程序 此应用程序必须具有辅助功能 才能使用全局热键 打开辅助功能首选项窗口没有问题 系统设置 gt 隐私和安全 gt 辅助功能 但用户必须手动单击 按钮 才能在硬盘上搜索我的应用程序并将我的应用程序手动添加到列表中 我正在尝试将
  • 为什么浏览器中的 http auth UI 如此糟糕?

    为什么没有注销按钮 为什么没有 您登录的网站 列表 是因为 HTTP 规范有问题吗 如果 Web 开发人员实际上可以依赖 HTTP 身份验证 那么他们的生活会容易得多 就 HTTP 而言 它是无国籍的 http www webopedia
  • 快速CRC算法?

    我想从 ASCII 字符串创建一个 32 位数字 CRC32 算法正是我正在寻找的 但我无法使用它 因为它需要的表太大了 它适用于资源非常稀有的嵌入式系统 那么 对于快速且精简的 CRC 算法有什么建议吗 当冲突的可能性比原始 CRC32