# 传输方法详解

Posted by yeong huann on May 04, 1999 at 12:48:01:

In Reply to: Re: 都是我的错 (但绝对不是作业) posted by Knight on May 04, 1999 at 10:06:24:

各位可以想想看如果我在同一传输程式传输"HZA"这个字串,那接收端如何得知,对方是要求我开一个"HZA"这
个档案,还是要我将"HZA"这个字串写入档案,亦或是对
方仅是传输一个讯息而已呢?这就关系到控制码.
在我的做法,我会将传输档案控制码设为"SF",开档设为"OF",传送讯息设为"SM",传送下一个封包定为"CF"..等
如此当传送端要传送"HZA"这个讯息时,实际上它传送的
是"SM@HZA@"这个字串(当然不是传送字串,而是将其编成二进制阵列传送),当对方收到资料时再将其解读即可去处理相对应的程式
也许各位认为那和编解码有何关系,大家可看看上面的例子--->SM@HZA@,很明显可以得知@和@中间的资料才是我要传送的资料,但重点出现了,我们如果在传送的字元中若有@怎么办?
其实方法很简单,我们可以查一下"@"它的16进制值为40h,所以如果我们可以让预传送的字元不包括40h即可
但怎么作呢?
经我测试的结果得知"H"=48h,"Z"=5Ah,""A"=41h
(由于编码的细节说明比较烦锁,而且也非正统,故仅说明方法)如下:
"H"=48h,我们可将其拆为高,低两个位元组,即"48h",我们分别对4和8做处理,4=34h,8=38h
由上述方法可得知:
"H"=34h,38h "Z"=35h,41h "A"=34h,31h (绝对不会出现40h)
所以我们传送的资料为应为53h,4Dh,40h,34h,38h,35h,41h,34h,31h,40h
(当然要将其资料转为10进制后传送)
那问题又来了,接收端要如何解读资料?
方法如下
1,先取出前两个字元解读对方命令
2,取出"@"和"@"间所有字元(在本例中取出:34h,38h,35h,41h,34h,31h)
由于传送端是传送10进位值,故我们要将其转为16进制才可得到上述结果
3,由于上述字元是经过分割处理,故须重组
(34h,38h)(35h,41h)(34h,31H)各一组
4,解码方法:
(1)若值为30~39则取低的4bit
ex:34h=04h,38h=08h
(2)若值大于40h则减去37h
ex:41h=41h-37h=0Ah
(3)(高位元组*10h) OR 低位元组
ex:(34,38h)==>(04h*10h)*08h=48h="H"
5,解读结果:
(34h,38h)=(04h*10h)or 08h=48h="H"
(35h,41h)=(05h*10h)or (41h-37h)=5Ah="Z"
(34h,31h)=(04h*10h)or 1h=41h="A"
当然以上的方法也许非正统,但却可适用在所有传输的工具上,(并列阜,串列阜,网路)均可使用,就算你要写即时传输速率控制也轻而易举(再多编些控制码即可).

Follow Ups:

- Re: 传输方法详解 (哇! 我也来分享) RVK 17:30:07 5/07/99 (2)
  - Re: 传输方法详解 (哇! 我也来分享) yeong huann 01:32:22 5/08/99 (1)
    - Re: 传输方法详解 (哇! 我也来分享) RVK 11:49:11 5/09/99 (0)