CRC32英特尔实现
CRC32 intel implementation
我想使用intel方法来计算文件crc(在c++中)。我找到了这个http://create.stephan-brumme.com/crc32/(切片8)。但是这个实现返回给我crc32 in int,但我想得到crc32 in unsigned char[4]像在一些库(例如cryptopp)。知道我该怎么做吗?关于
将整型转换为字节,例如:
void Uint2Uchars(unsigned char* buf, unsigned int n)
{
memcpy(buf, &n, sizeof n);
}
或者,如果您对特定的端序感兴趣,您可以这样做:
void Uint2UcharsLE(unsigned char* buf, unsigned int n)
{
size_t i;
for (i = 0; i < sizeof n; i++)
{
buf[i] = n;
n >>= CHAR_BIT;
}
}
或
void Uint2UcharsBE(unsigned char* buf, unsigned int n)
{
size_t i;
for (i = 0; i < sizeof n; i++)
{
buf[sizeof n - 1 - i] = n;
n >>= CHAR_BIT;
}
}
不要忘记包括适当的标题,<string.h>
和<limits.h>
如适用
你可以这样转换,但这取决于小/大端序和你的整型数的大小。
#pragma pack(1)
#include <cstdint>
typedef union
{
char crc4[4];
uint32_t crc32;
} crc;
crc.crc32 = yourcrc();
crc.crc4[0...3]
小端序代码
int i = crc();
unsigned char b[4];
b[0] = (unsigned char)i;
b[1] = (unsigned char)(i >> 8);
b[2] = (unsigned char)(i >> 16);
b[3] = (unsigned char)(i >> 24);
对于大端序只需反过来
int i = crc();
unsigned char b[4];
b[3] = (unsigned char)i;
b[2] = (unsigned char)(i >> 8);
b[1] = (unsigned char)(i >> 16);
b[0] = (unsigned char)(i >> 24);
假设int为32位:
unsigned int i = 0x12345678;
小端字节序:
char c2[4] = {(i>>24)&0xFF,(i>>16)&0xFF,(i>>8)&0xFF,(char)i};
大尾数法:
char* c = (char*)&i;
//or if you need a copy:
char c1[4];
memcpy (c1,&i,4);
//or the same as little endian but everything reversed
相关文章:
- 编译要在英特尔Hyperscan中使用的.cc文件时出现问题
- 将gsl c++程序与"英特尔MKL"链接
- 使用英特尔 PIN 修改寄存器
- 使用英特尔内联函数将打包的 8 位整数乘以浮点数向量
- 如何使用英特尔 PIN 捕获阵列的所有负载?
- 英特尔 TBB 程序不会终止,可能会误用参考计数器
- 将"-01"替换为"-02" 英特尔编译器选项会导致 FPE 在较小的 for 循环行程计数中抛出
- 在 Azure DevOps 构建管道中使用英特尔C++编译器为 Linux 环境构建C++代码
- 编译器错误(英特尔并行工作室 2019 与 Visual Studio 社区 2019)
- 如何要求 macports 用英特尔编译器包装 openmpi?
- 实施英特尔实感和 SDL2 时出现问题
- OpenGL 片段着色器未在英特尔 HD 4000 显卡上编译
- 英特尔将指令存储在重叠的内存区域
- 如何指示 CMAKE 在 Visual Studio 中使用英特尔 MKL
- 使用英特尔内部函数 (AVX) 中的混合说明
- 英特尔 PIN:如何查看推测性指令?
- 我正在尝试解决英特尔架构并行基础课程中关于 Coursera 的一项作业
- 使用 task_group 的英特尔线程构建模块性能不佳(新用户)
- 英特尔TBB concurrent_queue是如何工作的?它是否实现了细粒度的并行性
- CRC32英特尔实现