_mm_crc32_u8 给出的结果与参考代码不同

2023-12-13

我一直在与内在因素作斗争。特别是使用标准 CRC 计算和据推测等效的英特尔内在函数。我想转而使用_mm_crc32_u16, and _mm_crc32_u32但如果我不能让 8 位操作工作,那就没有意义了。

static UINT32               g_ui32CRC32Table[256] =
{
    0x00000000L, 0x77073096L, 0xEE0E612CL, 0x990951BAL,
    0x076DC419L, 0x706AF48FL, 0xE963A535L, 0x9E6495A3L,
    0x0EDB8832L, 0x79DCB8A4L, 0xE0D5E91EL, 0x97D2D988L,
....

// Your basic 32-bit CRC calculator
// NOTE: this code cannot be changed
UINT32 CalcCRC32(unsigned char *pucBuff, int iLen)
{
    UINT32 crc = 0xFFFFFFFF;

    for (int x = 0; x < iLen; x++)
    {
        crc = g_ui32CRC32Table[(crc ^ *pucBuff++) & 0xFFL] ^ (crc >> 8);
    }

    return crc ^ 0xFFFFFFFF;
}


UINT32 CalcCRC32_Intrinsic(unsigned char *pucBuff, int iLen)
{
    UINT32 crc = 0xFFFFFFFF;

    for (int x = 0; x < iLen; x++)
    {
        crc = _mm_crc32_u8(crc, *pucBuff++);
    }
    return crc ^ 0xFFFFFFFF;
}

该表适用于与 Intel 指令使用的不同的 CRC 多项式。该表适用于以太网/ZIP/等。 CRC,通常称为 CRC-32。 Intel 指令使用 iSCSI (Castagnoli) 多项式,CRC 通常称为 CRC-32C。

这个简短的示例代码可以通过取消注释所需的多项式来计算:

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

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

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

/* Compute CRC of buf[0..len-1] with initial CRC crc.  This permits the
   computation of a CRC by feeding this routine a chunk of the input data at a
   time.  The value of crc for the first chunk should be zero. */
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;
}

您可以使用此代码通过简单地计算每个一字节消息 0、1、2、...、255 的 CRC-32C 来为您的代码生成替换表。

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

_mm_crc32_u8 给出的结果与参考代码不同 的相关文章

随机推荐

  • $concat 字段与 $map mongodb 中的索引? [复制]

    这个问题在这里已经有答案了 我有以下收藏 id ObjectId 5b16405a8832711234bcfae7 createdAt ISODate 2018 06 05T07 48 45 248Z firstName Bruce las
  • 在 SubmitChanges 之前从 LINQ-to-SQL DataContext 检索对象

    我将一个新对象插入到 LINQ to SQL DataContext 中 但尚未调用 SubmitChanges MyDataContext db new MyDataContext MyObject newObject new MyObj
  • Chrome 扩展 - 如何定期访问网络摄像头和音频?

    我正在使用一个 chrome 扩展程序 我想与我的网络摄像头集成来执行一些时髦的计算机视觉和音频 ML 操作 通常我会做这样的事情 对于音频
  • 请给我 C# 中隐式和显式类型转换的示例

    任何人都可以给我现实生活中的隐式类型转换示例 我知道隐式类型转换意味着从派生类到基类的转换 但我不知道如何在 C 编码中显示 我不想用两行来定义它 我想定义一个完整的程序来显示 C 中的隐式和显式类型转换 请帮我 Regards 不 隐式类
  • 如何更改 FreeRTOS 中任务的最大可用堆大小?

    我通过以下方式在任务中创建元素列表 l dllist pvPortMalloc sizeof dllist dlllist 有 32 字节大 我的嵌入式系统有 60kB SRAM 所以我希望系统可以轻松处理我的 200 个元素列表 我发现在
  • 如何去除自定义按钮边框上的“妊娠纹”?

    在按钮上执行一些自定义绘制时Graphics2D对象 我得到以下结果 最左边的按钮未切换 另一个按钮已切换 正如您所看到的 切换按钮有这些白色的 妊娠纹 为什么会有这些以及如何删除它们 这是我用来绘制边框的代码 Draw border of
  • 使用 TreeMap 数据膨胀 ListView(自定义适配器)

    Solved 我根据 JJV的建议创建了一个适配器 我知道还有很大的改进空间 但目前还有效 我已经使用工作代码更新了程序的简化版本 我希望它对其他人有用 做这样的事情 public class TreeMapAdapter extends
  • mysql插入行时如何使用if not存在

    我想做的事情是检查是否有同一行 如果没有则向表中插入新行 在这种情况下 我该如何使用if not exists INSERT INTO facebook ID fb id label id page ids token VALUES NUL
  • Google Cloud Storage 返回我的公共文件的 NoSuchKey

    我这里有一个公共存储桶 http storage googleapis com tripket1 此存储桶中的所有文件的 ACL 都设置为 公共读取 然而 当我尝试查看任何文件时 例如 http storage googleapis com
  • Python中同时赋值和打印

    在Python中 有没有办法将结果分配给变量并立即打印它 换句话说 我正在寻找相当于 a something print a 仅一次 并非每个作业都应自动打印 有 REPL 例如对于 Scala 这会自动发生 scala gt val co
  • iOS 10.1.1 弹出窗口显示“应用程序可能会降低您的 iPhone 速度”

    当我在真实设备上通过 Xcode 构建并运行我的应用程序时 我会收到一个弹出窗口 AppName可能会降低你的 iPhone 速度 该应用程序的开发者需要对其进行更新以提高其兼容性 我没有看到任何内存问题 并且我的应用程序崩溃从未遇到过任何
  • 如何使用 group_level 将超集键与子集匹配(在 couchdb 中进行子选择?)

    如何在 couchdb 中进行子选择 或者如何使用 group level 将超集键与子集匹配 我有一个非常复杂的问题 希望对那些不仅仅是第一次学习 map reduce 和 couchdb 的人有一个不太复杂的答案 我正在开发一个系统 该
  • 如何将 @IdClass 与 JPA 存储库一起使用?

    我一直在使用 Spring JPA Repository 接口来持久化对象 而且效果非常好 但是当 Entity定义一个 IdClass 类不是嵌入的 但字段是对象的一部分 我应该创建吗findBy命名所有复合字段的方法 或者有没有办法创建
  • 如何让 App Engine Servlet 监听 Firebase

    我正在关注以下教程 https cloud google com solutions mobile firebase app engine android studio 我一切正常 电子邮件按预期每 2 分钟发送一次 但是 我现在希望扩展此
  • 使用模数 php 检测每 4 个

    我试图使用模数方法检测每第四篇文章 以在 WordPress 的布局中插入额外的代码 但我无法得到它 这是我的一个简短的例子 div class column div
  • toString 和 valueOf 截断小数点后的尾随 0

    在 javascript 中 我注意到 toString 和 valueOf 截断了小数点后的尾随 0 例如 var num 0 00 var num2 0 0100 num valueOf or num toString outputs
  • 将 DocRaptor Web 服务与 AngularJS 一起使用?

    我正在尝试使用 AngularJS 应用程序生成 Excel xls 文件猛禽博士 当仅尝试 DocRaptor 入门文档中所述的简单 POST 请求时 我不断收到以下错误 他们的文档声称他们支持 CORS 请求 任何帮助将不胜感激 Chr
  • 绘制分区统计图不绘制数据

    这是我的数据的链接https docs google com document d 1oIiwiucRkXBkxkdbrgFyPt6fwWtX4DJG4nbRM309M20 edit usp sharing 我的问题是 当我在 Jupyte
  • Dart 如何按键过滤映射

    如何根据键处理地图 如果在我的地图中 键等于我的变量 那么我想创建一个包含我的地图的列表 如果在我的地图中 键不等于我的变量 那么我想创建一个包含 2 个地图对象的列表 其中键具有最近的较低值 键具有最近的较高值 int myVar 100
  • _mm_crc32_u8 给出的结果与参考代码不同

    我一直在与内在因素作斗争 特别是使用标准 CRC 计算和据推测等效的英特尔内在函数 我想转而使用 mm crc32 u16 and mm crc32 u32但如果我不能让 8 位操作工作 那就没有意义了 static UINT32 g ui