我正在开发游戏.我将游戏对象存储在此地图中:
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?
我有以下框架:
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是如何到达的?
谢谢,
巴里
我需要使用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中实现此散列算法?
TCP 是否不负责通过在传输过程中发生丢失等可能需要的任何事情来确保通过网络完整发送流?
难道它没有做好吗?
为什么更高的应用层协议及其应用程序仍然执行校验和?
我必须将部分旧的和大型应用程序从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) 我需要使用 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和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) 我一直在与内在因素作斗争。特别是使用标准 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) 我需要准确计算CRC-8-Dallas/Maxim.有人可以提供算法吗?
任何帮助表示赞赏!
我正在学习有关CRC的信息,搜索引擎等对此一无所获。
为什么我们有“正态”,“逆向”和“倒数”多项式?是否有人喜欢Big Endian,Little Endian或其他?