明白人进,对文件进行CRC32校验(C语言)?

theflyfish2 2011-10-08 07:15:04
如何对文件产生CRC32校验码;(用于网络传输)
我的思路:把整个文件都读入到buffer中,然后调用CRC32校验函数
问题1:CRC32校验时,一次性能处理的数据长度有多大?好几M的文件能一次性处理,产生一个CRC校验码吗?
问题2:文件整体读入buffer再整体处理,会不会显得很笨拙?好几M的文件占用的内存会不会太大。有没有更好的方法?
谢谢!
...全文
715 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
theflyfish2 2011-10-10
  • 打赏
  • 举报
回复
哦了,谢谢大家
用户 昵称 2011-10-09
  • 打赏
  • 举报
回复
如果文件就几兆,那么就都读进系统里面吧,现在的操作系统都很智能,分配的内存说不定在什么地方。
saiyaman5 2011-10-09
  • 打赏
  • 举报
回复
分配一个buffer,反重使用就行了,读一次处理一次,再读一次.
theflyfish2 2011-10-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jennyvenus 的回复:]

crc 都有个初始值,只要下次crc时维护好这个初始值,那么分段crc跟一块crc是一样的。
[/Quote]
谢谢!如果一块CRC的话,那文件的处理能不能再优化些,必须都得一起读入buffer么
buyong 2011-10-09
  • 打赏
  • 举报
回复
send最大值:using getsockopt to retrieve the value of socket option SO_MAX_MSG_SIZE
morebread 2011-10-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 theflyfish2 的回复:]

感谢大家的回答,我的CRC校验时用于嵌入式片上机与服务器端通讯。还有两个问题:
1.如果使用分开的CRC校验,那一次处理的数据长度应该为多少?给个参考数字
2.在socket通讯中使用send时,一次能发送的数据长度一般为多少?给个参考数字
[/Quote]

分包的长度应该根据你实际应用的场景的网络状况决定,如果单片机性能好,网络环境也好,那么每包的大小可以大些,如果单片机性能不怎么样,网络环境也差,那么包可以小一些。这个没有一个具体的数字的。

而且,send函数在应用层仅仅是将需要发送的数据放入协议栈的发送缓冲区,不是说你调用一次send,系统就将你传入的buffer打包成一个网络包发出去了
MagicFuzzX 2011-10-09
  • 打赏
  • 举报
回复
创建文件内存映射,将文件读取到内存中,然后将buffer地址传给计算crc32的函数就行了
theflyfish2 2011-10-09
  • 打赏
  • 举报
回复
感谢大家的回答,我的CRC校验时用于嵌入式片上机与服务器端通讯。还有两个问题:
1.如果使用分开的CRC校验,那一次处理的数据长度应该为多少?给个参考数字
2.在socket通讯中使用send时,一次能发送的数据长度一般为多少?给个参考数字
用户 昵称 2011-10-08
  • 打赏
  • 举报
回复
crc 都有个初始值,只要下次crc时维护好这个初始值,那么分段crc跟一块crc是一样的。
诶呦 2011-10-08
  • 打赏
  • 举报
回复
应该是多长都可以吧,只用过CRC16的校验

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧