我想使用英特尔方法来计算文件Crc(在C++中)。我发现这个http://create.stephan-brumme.com/crc32/(由8切成)。但是这个实现在int中返回了crc32,但是我想像在某些库(例如cryptopp)中那样在unsigned char [4]中获得crc32。任何想法我怎么能做到这一点? 问候CRC32英特尔实施
0
A
回答
2
您将您的INT成字节,例如,像这样:
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;
}
}
不要忘记包含适当的标题,如适用,可以使用和<limits.h>
。
2
像这样的东西,你可以转换,但是这取决于小/ big endian和有多大你的整数都是。
#pragma pack(1)
#include <cstdint>
typedef union
{
char crc4[4];
uint32_t crc32;
} crc;
crc.crc32 = yourcrc();
crc.crc4[0...3]
0
小端
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);
0
假设你的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
相关问题
- 1. Atomic int错误地递增?英特尔TBB实施
- 2. 英特尔实感Java支持
- 3. 英特尔实感 - 开发工具
- 4. 英特尔Xdk后端实现
- 5. 英特尔TBB和Cilk Plus线程亲和力英特尔MIC
- 6. 特质实施
- 7. 英特尔XDK FILETRANSFER错误
- 8. 英特尔TBB许可证
- 9. 英特尔IOT与PLC
- 10. 英特尔IA-32大会
- 11. StartAR方法英特尔XDK
- 12. ZGEMM英特尔的MIC
- 13. 英特尔IPP ippsFree()崩溃
- 14. 英特尔Fortran损坏DLL
- 15. 英特尔XDK框架
- 16. 英特尔TBB:图形池
- 17. 英特尔GMA 4500HD&vsync
- 18. 英特尔汇编优化
- 19. 英特尔8086处理器
- 20. 英特尔标准库(C++)
- 21. 哈斯克尔hGetLines实施
- 22. 与英特尔伽利略gen2的英特尔xdk守护进程
- 23. 什么是英特尔®安装和配置软件(英特尔®SCS)
- 24. 我如何安装英特尔编译器和英特尔mpi的提升?
- 25. 哈斯克尔 - 实施和实例
- 26. 加速度计与VS 2015中的英特尔实感对比
- 27. 提高准确度英特尔实感语音识别
- 28. 实施互联网的希尔伯特地图
- 29. 苹果斯威夫特辛格尔顿实施
- 30. 我不能安装英特尔haxm
重要的一点是你是否想用big endian和little endian顺序的字节数。你知道吗? – john 2013-03-20 13:12:37
有什么区别?你能告诉我怎么用这两种方法吗?然后我可以计算CryptoPP中的crc,并比较结果 – januszmk 2013-03-20 13:19:12