紧急紧急,CRC校验的问题,保证给分。

bluestar 2001-06-22 04:41:00
使用摩托罗拉芯片与因特尔的芯片通讯。

由于摩托罗拉芯片使用的是大序(就是高字节在前),而因特尔的芯片用的是小序(低字节在前)。

通讯的时候协议中使用CRC校验,在因特尔下的CRC校验和在摩托罗拉下的CRC校验不相等。

欲求在大序下的CRC校验代码。

万分感谢!
...全文
144 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xxxbird 2001-06-24
  • 打赏
  • 举报
回复
做完上述工作之后再做CRC校验。
xxxbird 2001-06-24
  • 打赏
  • 举报
回复
实际上你根本不需要考虑所谓大序CRC算法。
在你定义的协议类型中,应该只使用short, long, char数据类型,而不应该使用其它数据类型。
在只使用上述数据类型的情况下:
(1)数据由Intel->Motorola
在传输前,需做如下的转换:
将所有short(16位)利用htons转换成网络字节顺序(大序),
将所有long(32位)利用htonl转换成网络字节顺序(大序),
所有char类型数据不做转换。上述工作完成后,就可以将数据通过网络传给Motorola机器了。
在Motorola机器上就不必考虑字节顺序问题。
(2)数据由Motorola->Intel
传输前不必考虑字节顺序问题,直接传输就是了。
在Intel机器接收到数据后,需做如下的转换:
将所有的short(16位)利用ntohs转换成主机字节顺序(小序,little-endian)
将所有的long(32位)利用notohl转换成主机字节顺序
char类型不必转换。
bluestar 2001-06-24
  • 打赏
  • 举报
回复
谢谢,不管行不行,都给分。
xxxbird 2001-06-24
  • 打赏
  • 举报
回复
Here is a simple sample. We assume that you want to transfer the following struct between Intel and Motorola machine:

typedef struct
{
short msgid;
long msglen;
char buffer[512];
short CRC;
} testpacket;

testpacket tp;

(1) Intel->Motorola
Intel:
Step 1: tp.CRC = Calc_CRC (tp);
Step 2: tp.msgid = htons (tp.msgid);
Step 3: tp.msglen = htonl (tp.msglen);
Step 4: tp.CRC = htons (tp.CRC);
When all these works down, just send tp to Motorola

Motorola:
Check CRC, no other works needed.

(2) Motorola -> Intel
Motorola:
Just send the packet, no other works needed.

Intel:
Read the packet first,
Step 1: tp.msgid = ntohs (tp.msgid);
Step 2: tp.msglen = ntohl (tp.msglen);
Step 3: tp.CRC = ntohs (tp.CRC);
Step 4: crc = Calc_CRC (tp), check it


bluestar 2001-06-23
  • 打赏
  • 举报
回复
还有人能回答吗?

冰河:我必须用CRC校验,协议不可能改动

xxxbird,因为我没时间去理解CRC校验算法,希望能找到一个大序下的CRC校验法。这些函数我也用过,可是用在CRC校验中有些繁琐。

我是用查表法的CRC校验。
xxxbird 2001-06-22
  • 打赏
  • 举报
回复
在Intel芯片中将CRC转换成大序后再传输吧。没有必要用大序下的CRC校验算法。实际上有这些函数可以为你做到
htonl, htons - 分别将long及short转换成网络字节顺序(big-endian)
ntohl, ntohs - 分别将long及short转换成主机字节顺序


duuyuu 2001-06-22
  • 打赏
  • 举报
回复
以太网一般都是小序呀,怎么会冒出个大序呢?
我记得只有FDDI是大序。
你是直接面向网卡编程吗?
换一个校验方法看看,或者干脆忽略校验,或者自己写一个
和字节顺序无关的校验算法。
wwwunix 2001-06-22
  • 打赏
  • 举报
回复
你用的是什么协议?

4,391

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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