标签: crc

代码有多快

我正在开发游戏.我将游戏对象存储在此地图中:

std::map<std::string, Object*> mObjects;
Run Code Online (Sandbox Code Playgroud)

std::string是在代码中进一步查找的对象的键/名称.指向某些对象非常容易,例如:mObjects["Player"] = ....但是我担心由于在该地图中的每次搜索中分配std :: string而导致速度变慢.所以我决定int用作该地图的关键.

第一个问题:那真的会更快吗?

第二,我不想删除我当前访问的对象类型,所以我找到了方法:存储crc字符串计算为关键.例如:

Object *getObject(std::string &key)
{
   int checksum = GetCrc32(key);
   return mObjects[checksum];
}

Object *temp = getOject("Player");
Run Code Online (Sandbox Code Playgroud)

或者这是个坏主意?为了计算crc我会用boost::crc.或者这是个坏主意,校验和的计算比使用密钥类型在地图中搜索要慢得多std::string

c++ boost checksum crc map

4
推荐指数
1
解决办法
645
查看次数

计算HDLC帧的FCS(CRC)

我有以下框架:

7e  01 00  00  01  00  18  ef  00  00  00   b5   20 c1 05 10 02 71 2e 1a c2 05 10 01 71 00 6e 87 02 00 01 42 71 2e 1a 01 96 27 be 27 54 17 3d b9 93 ac 7e
Run Code Online (Sandbox Code Playgroud)

如果我理解正确,那么就是计算FCS的帧的这一部分:

010000010018ef000000b520c1051002712e1ac205100171006e8702000142712e1a019627be2754173db9
Run Code Online (Sandbox Code Playgroud)

我已经尝试将其输入到许多在线计算器中,但我无法从上述数据中生成0x93ac.

http://www.lammertbies.nl/comm/info/crc-calculation.html输入类型为十六进制.

0x93ac是如何到达的?

谢谢,

巴里

checksum serial-port crc frame

4
推荐指数
2
解决办法
2万
查看次数

CRC64文件校验和PHP实现

我需要使用PHP获取文件的CRC64校验和.

有了这段代码

file_put_contents('example.txt', 'just an example');

echo hash_file('crc32', 'example.txt');
Run Code Online (Sandbox Code Playgroud)

我得到CRC32校验和"c8c429fe";

但我需要使用CRC64算法得到校验和(

在此输入图像描述)

我从这里拿到了它:http://en.wikipedia.org/wiki/Cyclic_redundancy_check

如何在PHP中实现此散列算法?

php checksum crc

4
推荐指数
2
解决办法
5131
查看次数

TCP 校验和

TCP 是否不负责通过在传输过程中发生丢失等可能需要的任何事情来确保通过网络完整发送流?

难道它没有做好吗?

为什么更高的应用层协议及其应用程序仍然执行校验和?

checksum network-programming tcp crc

4
推荐指数
1
解决办法
1982
查看次数

将Delphi +汇编程序CRC32实现转换为C#

我必须将部分旧的和大型应用程序从Delphi转换为.NET(C#).这是CRC32的一个奇怪的(至少对我来说)实现:

function CRC32(CRC: LongWord; Data: Pointer; DataSize: LongWord): LongWord; assembler;
asm
         AND    EDX,EDX
         JZ     @Exit
         AND    ECX,ECX
         JLE    @Exit
         PUSH   EBX
         PUSH   EDI
         XOR    EBX,EBX
         LEA    EDI,CS:[OFFSET @CRC32]
@Start:  MOV    BL,AL
         SHR    EAX,8
         XOR    BL,[EDX]
         XOR    EAX,[EDI + EBX * 4]
         INC    EDX
         DEC    ECX
         JNZ    @Start
         POP    EDI
         POP    EBX
@Exit:   RET
         DB 0, 0, 0, 0, 0 // Align Table
@CRC32:  DD 000000000h, 077073096h, 0EE0E612Ch, 0990951BAh
         DD 0076DC419h, 0706AF48Fh, 0E963A535h, 09E6495A3h
         DD 00EDB8832h, 079DCB8A4h, 0E0D5E91Eh, 097D2D988h
         DD 009B64C2Bh, …
Run Code Online (Sandbox Code Playgroud)

c# delphi assembly crc32 crc

4
推荐指数
2
解决办法
1082
查看次数

是否有用于 CRC32C (Castagnoli) 的 LINUX 命令行工具

我需要使用 CRC32C(CRC32 计算的 Castagnoli 变体)来验证数据。我在任何地方都找不到可以计算此值以验证相关值的独立命令行实用程序。CRC32?MD5?沙?查看。CRC32C?你输了。

我需要一个程序。必须是自包含的(没有需要安装的非标准 PERL 或 Python 模块......标准模块是可以的)。可能没有 Java,因为我不能保证安装 Java。Ruby 就出来了。

聪明的“gzip”或“tar”技巧很好。需要在 OS-X、Linux 和 Android 上运行。

我确实可以写一个(代码在 RFC 中),但是来吧......这有点像

“嗯,我的车用的是合成油……该换油了,我去当地的炼油厂打几夸脱吧”

或者

“比尔叔叔想要一个 PB&J 三明治,但他对麸质过敏……让我去拿些米粉做无麸质面包”

我找到了一些库来计算 CRC32C,但没有程序。叽。

https://developers.google.com/storage/docs/composite-objects?hl=ja

linux crc32 crc google-cloud-storage

4
推荐指数
2
解决办法
3574
查看次数

匹配来自STM32F0和zlib的CRC32

我正在研究运行Linux和STM32F0的计算机之间的通信链接.我想对我的数据包使用某种错误检测,因为STM32F0有CRC32 hw,我在Linux上有zlib和CRC32,我认为在我的项目中使用CRC32是个好主意.问题是我不会在不同平台上获得相同数据的CRC值.

#include <inttypes.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <zlib.h>

int
main(void)
{
  uint8_t byte0 = 0x00;
  uint32_t crc0 = crc32(0L, Z_NULL, 0);
  crc0 = crc32(crc0, &byte0, 1);
  printf("CRC32 value of %" PRIu8 " is: %08" PRIx32 "\n", byte0, crc0);
}
Run Code Online (Sandbox Code Playgroud)

输出CRC32 value of 0 is: d202ef8d与几个在线计算器的结果相匹配.

看来我在STM32上使用的任何设置都无法获得相同的CRC.我已经找到了一个关于CRC hw如何在ST的应用笔记中计算其值的流程图,但我无法弄清楚它是如何在zlib中完成的.

有谁知道它们是否兼容?

[编辑1]它们都使用相同的初始值和多项式.

[编辑2] STM32代码相对来说非常复杂,因为它使用的是hw.

...
/* Default values are used for init value and polynomial, see edit 1 */
CRC->CR |= CRC_CR_RESET;
CRC->DR = (uint8_t)0x00; …
Run Code Online (Sandbox Code Playgroud)

c linux crc32 crc stm32

4
推荐指数
2
解决办法
5788
查看次数

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

我一直在与内在因素作斗争。特别是使用标准 CRC 计算和假定等效的英特尔内在函数时,我没有得到相同的结果。我想转而使用_mm_crc32_u16_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;
} …
Run Code Online (Sandbox Code Playgroud)

c crc

4
推荐指数
1
解决办法
1261
查看次数

ios - 如何计算NSData的CRC-8-Dallas/Maxim?

我需要准确计算CRC-8-Dallas/Maxim.有人可以提供算法吗?

任何帮助表示赞赏!

crc nsdata ios

4
推荐指数
2
解决办法
6832
查看次数

为什么将CRC多项式指定为正态,反向等?

我正在学习有关CRC的信息,搜索引擎等对此一无所获。

为什么我们有“正态”,“逆向”和“倒数”多项式?是否有人喜欢Big Endian,Little Endian或其他?

crc

4
推荐指数
1
解决办法
2046
查看次数

标签 统计

crc ×10

checksum ×4

crc32 ×3

c ×2

linux ×2

assembly ×1

boost ×1

c# ×1

c++ ×1

delphi ×1

frame ×1

google-cloud-storage ×1

ios ×1

map ×1

network-programming ×1

nsdata ×1

php ×1

serial-port ×1

stm32 ×1

tcp ×1