一个字节是什么意思通蓄的解释方法是什么意思?

校验码为第一字节到第二十五字节的累积和, 这是我与一种PLC通讯时,它的校验方式,但我看不懂什么意思拜_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
校验码为第一字节到第二十五字节的累积和, 这是我与一种PLC通讯时,它的校验方式,但我看不懂什么意思拜
我有更好的答案
通过与,或等运算,得出校验码来。 校验码一般以双字为单位,从头到校验码前的数分成一个个双字,不会导致错误数据的处理一般的通信都是前面带功能码,中间带数据,后面带校验。 这是为了完成的识别数据
采纳率:59%
为您推荐:
其他类似问题
校验码的相关知识
等待您来回答[发明专利]数据处理方法在审
申请/专利权人:
公开/公告号:CNA
发明/设计人:;;
公开/公告日:
主分类号:
搜索关键词:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国银联股份有限公司,未经中国银联股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【】
【说明书】:
文件名长度文件特征字串11FK********N16F********B????N@16F********M????N@如图2所示,它示出了根据本发明的一个实施例、文件名检查流程示意图。如图2所示,该数据处理方法包括如下步骤。步骤一,收到文件名检查开始的通知后,根据真实文件名计算出该文件名的长度,执行步骤二。步骤二,根据得到的文件名长度,到配置中查找是否存在文件名长度一致的配置记录,执行步骤三。步骤三,如果在配置中找到符合要求的配置记录,跳到步骤五进行处理,否则跳到步骤四进行处理。步骤四,直接判定文件名检查不通过,结束处理。步骤五,使用从配置中获取的相应的文件名特征字串对真实文件名进行通配(具体通配过程,请见图3所示),如果通配结果不一致,则跳到步骤六处理,否则跳到步骤七处理。步骤六,继续从配置中查找是否存在下一条文件名长度一致的配置记录,执行步骤三。步骤七,直接判定文件名检查通过,结束处理。图3进一步示出文件名和文件名特征字串通配方法实现示意图。该通配方法包括如下步骤。步骤一,用n表示真实文件名长度,用x表示通配到的字节位置,x初始化赋值为1,表示从第一个字节开始进行通配。步骤二,如果x小于等于n,说明文件名还没有通配完成,继续执行步骤三;否则表示通配已经完成,判定文件名通配成功,允许文件传输。步骤三,检查文件特征字串的第x个字节是否是通配字符。若不是通配字符,则执行步骤四;若是通配字符,则执行步骤六。步骤四,直接检查文件特征字串的第x个字节是否和真实文件名的第x个字节一致,若一致,则执行步骤五;若不一致,则直接判定文件名通配失败,拒绝文件传输。步骤五,令x等于x+1,即准备通配文件名中下一个位置的字节,并返回执行步骤二。步骤六,根据通配字符的通配含义,用m表示该通配字符所通配的真实字节长度,执行步骤七。步骤七,检查文件特征字串,从第x个字节开始连续m个字节是否均为同一通配字符,若均是同一通配字符,则执行步骤八;若不是同一通配字符,则说明配置错误,直接判定文件名通配失败,拒绝文件传输。步骤八,检查真实文件名,从第x个字节开始连续m个字节是否符合通配字符的通配含义(即若文件特征字串的第x个字节表示通配8位日期格式,则真实文件名从第x个字节开始的8个字节应该符合8位日期格式),若符合通配字符的通配含义,则执行步骤九;若不符合通配字符的通配含义,则直接判定文件名通配失败,拒绝文件传输。步骤九,令x等于x+m,即跳过文件名中已经通配成功的m个字节,准备通配再后续的字节,并返回执行步骤二。以下以具体的实例来进一步说明文件名和文件名特征字串通配方法。在本例中,假设通配字符*代表8位日期格式,?代表4位数字格式,@代表1位小写字母格式。并且假设根据业务文件的情况,已配置如表1所示的三种文件特征字串。以上文中提到的F0Na文件为例,描述文件名的整个检查过程。1. 计算得到F0Na文件名长度为162. 在配置中查找第一条文件名长度一致的记录,即:F********B????N@a) 设置n=16,x=1b) 检查文件特征字串第1个字节为字母F,非通配字符。直接检查真实文件名中第1个字节F和文件特征字串第1个字节F是否相同,检查结果一致。令x=x+1,即x=2。(x&=n,继续检查)c) 检查文件特征字串第2个字节为字符*号,是通配字符。由于*号的含义是代表8位日期格式,故m=8,检查文件特征字串的第2个字节到第9个字节(共8个字节),均为*号,则认为配置正确,继续下一步,检查真实文件名。d) 检查真实文件名第2个字节到第9个字节,取值为,检查此字符串符合8位日期格式。直接判断文件名中第2个字节到第9个字节通配通过。令x=x+m,即x=10。(x&=n,继续检查)e) 检查文件特征字串第10个字节为字母B,非通配字符。直接检查真实文件名中第10个字节M和文件特征字串第10个字节B是否相同,检查结果不一致。判定此次通配失败。3. 在配置中查找下一条文件名长度一致的记录,即:F********M????N@a) 设置n=16,x=1b) 检查文件特征字串第1个字节为字母F,非通配字符。直接检查真实文件名中第1个字节F和文件特征字串第1个字节F是否相同,检查结果一致。令x=x+1,即x=2。(x&=n,继续检查)c) 检查文件特征字串第2个字节为字符*号,是通配字符。由于*号的含义是代表8位日期格式,故m=8,检查文件特征字串的第2个字节到第9个字节(共8个字节),均为*号,则认为配置正确,继续下一步,检查真实文件名。d) 检查真实文件名第2个字节到第9个字节,取值为,检查此字符串符合8位日期格式。直接判断文件名中第2个字节到第9个字节通配通过。令x=x+m,即x=10。(x&=n,继续检查)e) 检查文件特征字串第10个字节为字母M,非通配字符。直接检查真实文件名中第10个字节M和文件特征字串第10个字节M是否相同,检查结果一致。令x=x+1,即x=11。(x&=n,继续检查)f) 检查文件特征字串第11个字节为字符?号,是通配字符。由于?号的含义是代表4位数字格式,故m=4,检查文件特征字串的第11个字节到第14个字节(共4个字节),均为?号,则认为配置正确,继续下一步,检查真实文件名。g) 检查真实文件名第11个字节到第14个字节,取值为0000,检查此字符串符合4位数字格式。直接判断文件名中第11个字节到第14个字节通配通过。令x=x+m,即x=15。(x&=n,继续检查)h) 检查文件特征字串第15个字节为字母N,非通配字符。直接检查真实文件名中第15个字节N和文件特征字串第15个字节N是否相同,检查结果一致。令x=x+1,即x=16。(x&=n,继续检查)i)
检查文件特征字串第16个字节为字符@号,是通配字符。由于@号的含义是代表1位小写字母格式,故m=1,检查文件特征字串的第16个字节本身为@号,则认为配置正确,继续下一步,检查真实文件名。j) 检查真实文件名第16个字节,取值为小写字母a,检查此字符符合1位小写字母格式。直接判断文件名中第16个字节通配通过。令x=x+m,即x=17。k) 此时x&n,判定整个真实文件名检查通过。4. 确定文件名检查成功。上文中,结合图2和图3具体示出了本发明所述的计算机执行的数据处理方法可如何适用于文件名合法性检查的场景。但是,本领域中的普通技术人员能够理解,在不偏离本发明的精神和范围的情况下,还可以将本发明的计算机执行的数据处理方法应用于其它场景。这些应用场景的变更和替换应理解为落入本发明权利要求书所限定的范围内。
专利文献下载
1、专利原文基于中国国家知识产权局专利说明书;
2、支持发明专利 、实用新型专利、外观设计专利(升级中);
3、专利数据每周两次同步更新,支持Adobe PDF格式;
4、内容包括专利技术的结构示意图、流程工艺图或技术构造图;
5、已全新升级为极速版,下载速度显著提升!欢迎使用!
该文献正飞奔而来,请耐心等候...30
友情链接:交换友情链接需要网站权重大于3,网站收录10W以上,如符合条件,请联系QQ:。
行业网站:相关推荐:
400-周一至周五 9:00-18:00
服务热线:400-投诉建议:022-
扫一扫,微信关注高智网
高智&让创新无法想象1900万件&专利数据& & & &,给大家介绍了在串口通信中的线程应用,解决接收数据的问题。但是在最后给大家提了3个问题。今天就给大家介绍一下第一个问题的处理方法,也就是——如果返回的数据的数据长度不同,如何写Read方法中的循环来读取完整的返回数据。
&&&&&&&&当然如果您没有看我的上篇博客,这里我再单独把read方法写一下:
Private&Sub&Read()&&
serialPort.DiscardInBuffer()&&
Dim&str&As&String&=&&&&&
Dim&buf()&As&Byte&&
For&i&=&0&To&10'假设接收到的数据每次应为11个&&
Dim&d&As&Integer&&
d&=&_serialPort.ReadByte'从串口中读取一个字节的数据,如果设置了读取超时时间,在规定的时间未读到数据会触发超时错误。&&
str&+=&Convert.ToString(d,&16).PadLeft(2,&&0&)&&
buf&=&GetByte(str)&&
'根据协议,处理收到的数据&&
Catch&ex&As&Exception&&
Throw&ex&&
&& & & &&上面的代码中重点是其中的For循环,循环的次数是根据返回数据的长度而确定的,这样保证每条返回的数据的完整性。而且Port类的ReadByte是堵塞调用的,在规定的时间内未读到数据会触发超时错误,这也就要求我们必须保证每次接受的操作的循环次数必须和返回的数据长度一致。但在我们的实际应用中不可能保证我们做的系统面对的只是单一类型的返回数据。我也说过可以通过命令类型来控制Read方法中For循环的次数,只需要在Send方法中多添加一个参数(或封装一个实体,实体中多加一个属性,一个意思。)但总是有例外的情况,这个我就遇到了(我遇到的是命令的类型一样。但返回的数据根据硬件的不同返回的数据长度就不同。)
& & & & &有人就会问了。如此强大的微软没有封装这样的方法吗可以每次保证接收数据的完整性。这个我当然也寻找了好长时间,以下是我对SerialPort类的一些Read方法的整理:
SerialPort.Read 方法 (Byte[], Int32, Int32)SerialPort.Read 方法 (Char[], Int32, Int32)
这两个方法的解释:
从&SerialPort&输入缓冲区中读取大量字符(字节),然后将这些字符(字节)写入到一个字符(字节)数组中指定的偏移量处。
类型:System.Char[]
将输入写入到其中的字符(字节)数组。
类型:System.Int32
缓冲区数组中开始写入的偏移量。
类型:System.Int32
要读取的字符(字节)数。
返回值:
类型:System.Int32
读取的字符(字节)数。
总结:&其中很重要的一点就是要读取的字符(字节)数。这也需要们先知道我们需要读取的数据的长度。
SerialPort.ReadChar 方法SerialPort.ReadByte 方法
这两个方法的解释:
从&SerialPort&输入缓冲区中同步读取一个字符(字节)。
总结:这两个方法都是读取缓冲区的一个字节或字符,所以我们必须制定要读取多少次,也就是必须先知道我们要读取的数据的长度.
SerialPort.ReadExisting 方法:
这个方法的解释:
在编码的基础上,读取&SerialPort&对象的流和输入缓冲区中所有立即可用的字节。
总结:好像这个方法就是我们一直苦苦寻找的方法,但我们分析一下串口通信的机制,首先说我们的read方法,是在发送完数据以后马上开启Read线程,而串口读数据是需要时间的,这包括发送、硬件处理(取决于其频率!)、返回的时间,而这些时间加起来一定是比处理器处理read方法这点代码所用的时间要长的,所以往往导致ReadExisting读到的数据往往是空的(我们如果是逐句的代码调试,这个方法往往又是正确的,因为我们手动的减慢了处理器处理这些代码的时间。)
&&&对于串口自己的监听时间DataReceive(收到数据才会触发)事件来说,好像这个方法会更有用。但是MSDN上这样说的这个方法:“不保证对接收到的每个字节引发
DataReceived 事件”。这也就说明我对于我们调用这个方法读到的数据个数,就更不能确定了。当然完全可以把收到的数据都保存起来,然后等着一定的时间收不到数据了,就作为全部收到的数据来处理。这样做的重点也就是这个“一定时间的把控”(和后面说的方法类似)但这里就不详细说了,毕竟今天的重点是我们的Read方法。
ReadLine方法:
这个方法的解释;
一直读取到输入缓冲区中的&NewLine&值。(&NewLine:表示行尾的值。
默认值为换行符 )
总结:这个方法很适合一个聊天的程序,我们没说完自己的一句话,需要发送的话,就点击一下回车(一个&NewLine)。但对于我们面对的硬件来说,没有一个&NewLine在那等着你用。
ReadTo方法:
这个方法的解释:
一直读取到输入缓冲区中的指定 value 的字符串。
总结:这个方法和前面的几个方法有类似的问题,也就是你不可能提前知道你要读的最后一个字符是什么.(但如果你提前规定的协议中已经设定有结束的标志,这个就有可能实现)
&&&&&&&&说了这么多的方法,我没有找到合适的方法经过的的思考也就有了我下面的实现方法,希望对同样遇到我这样问题的人来说有所帮助:
Read方法:
Private Sub Read()
Dim str As String = && '定义临时保存返回数据的字符串变量
Dim buf() As Byte '定义保存返回数据类型为byte的变量
Dim dataCount As Integer = _serialPort.BytesToRead '定义保存缓冲区数据的变量
Dim dataCountNew As Integer = 0 '定义保存最新的需要读取的缓冲区数据的变量
Dim CountTimes As Integer = 0 '尝试从缓冲区读数据的次数
'此处是本段的核心,1000*sleep(5)表示自己定义的最长等待串口返回数据的时间
'如果第一次取得的缓冲区的需要读取的数据为0,则线程暂停5ms(当然也可以自己定,数字越小性能未必会更好。合适就行)。一旦读到数据就执行下面的代码。或者循环完毕,也不能读到数据就会抛出异常。
While (dataCount = 0 And CountTimes & 1000)
Thread.Sleep(5) '线程休眠5ms
dataCount = _serialPort.BytesToRead '重新取出缓冲区待读到的数据
'如果取的的数据还为0
If (dataCount &= 0) Then
'读取的次数加1
CountTimes = CountTimes + 1
Continue While '继续执行循环
Else '否则退出循环
Exit While
'如果等待1000*5ms=5秒以后仍然没有读到数据
If dataCount = 0 Then
Throw New Exception(&连接分机超时,请查看分机是否启动,或检查通讯网络!!&)
'如果读到数据,首先休眠500ms(这个数据一般是根据返回的数据的次数和晶振的频率,以及数据传输的一些时间设定,如果查询数据对于时间的性能要求不高可以适当的加长),再次读取缓冲区待读数据,和刚才读到的数据进行比较,如果相等,则说明读到的数据已经完整。可以进行处理。
While True
Thread.Sleep(500)
dataCountNew = _serialPort.BytesToRead '重新读取缓冲区数据的个数。
'如果不等则把这次读到的缓冲区数据的个数作为最新的数据保存
If dataCount && dataCountNew Then
dataCount = dataCountNew
Else '如果相同,说明数据返回完全,退出循环
Exit While
For i = 0 To dataCount '这时的循环,会根据实际情况的不同而不同。
Dim d As Integer
d = _serialPort.ReadByte '从串口中读取一个字节的数据,如果设置了读取超时时间,在规定的时间未读到数据会触发超时错误。
str += Convert.ToString(d, 16).PadLeft(2, &0&)
buf = GetByte(str) '将收到的数据转换为字节数组。
'根据协议,处理收到的数据
Catch ex As Exception
& & &上面的代码中的注释已经很清楚了我也不想多做说明。
& &&&还需要说明两点:
如果在读到数据以后的第二个while循环中sleep的时间过短,也可能会造成数据读取的错误,原因是第一次读到数据以后,休眠的时间中串口缓冲区没有读到下次的数据,这时候第一次读到的缓冲区的数据个数,和第二次读到的缓冲区数据的个数会相同。这样做最大的好处在于让程序自动的确定等待的时间的长短,我们把每次while循环的时间尽量设置在合理范围内的最短,(第一个合理的范围是:串口第一次收到数据所经历的时间,第二个合理的范围是:一次命令发送后,每次返回数据的时间间隔一般是根据返回的数据的次数和晶振的频率,以及数据传输的一些时间设定)
本文已收录于以下专栏:
相关文章推荐
在我的前两篇博客中,给大家介绍了在串口通信中创建子线程Read方法,来读取串口中的数据,以及如何控制我们Read方法读取的次数。但还有很重要的一点就是在这个过程中,Read方法是Send方法开启的一个...
   
关于串口通信中的线程问题,本来是早就想总结一下的。但是在这两个星期的学习过程中,发现自己原来的理解还是有很多的不全面的地方。通过两个月的学习,自己对这块的认识还是有了很大的提升,今天...
内核函数调用关系可以通过dump_stack()函数分析出来
uart设备是tty设备的一种,主从设备号的分配依赖于平台实现,在我的mx51板上,主设备号是217,从设备号范围为...
在linux下编写终端程序时,有规范模式 ,非规范模式(原始模式特殊的非规范模式)之分。不用于终端,而是在串口这种使用情况下,一般设置为原始模式(非规范的一种特殊情况)。但用read()函数,希望从串...
/*串口read函数分析
* 当应用程序调用read系统调用时,会调用tty_fops中的tty_read
* 接下来分析tty_read函数
* 其中最重要的就是ld-&ops-&read(tt...
read函数从打开的设备或文件中读取数据。
ssize_t read(int fd, void *buf, size_t count);
返回值:成功返回读取的字节数,出...
在数组c_cc中有两个下标(VTIME和VMIN)对应的元素不是控制符,并且只是在原始的模式下才有效。串口的模式控制是通过options.c_lflag控制的,如:options.c_lflag &=...
这里以线程监听串口数据,实现串口数据的自动接收为例进行说明:
首先,线程监听需要一个线程函数:(DWORD WINAPI)
UINT  CSerialDAWDlg::ThreadFunc(LPVO...
上篇博客我们谈到了如何利用虚拟串口程序,学习和调试串口通信的例子.最后也留给大家乐一个问题就是我如何知道对方有没有发消息.我总不能规定个事件去点击一下接收事件吧.应该是可以向QQ那样“当好友发送了消息...
转载自:/content/12/18.shtml
SetCommMask  设置要监控的事件,Wait...
他的最新文章
讲师:汪剑
讲师:刘道宽
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
白手起家, 积分 21, 距离下一级还需 179 积分
论坛徽章:0
socket通讯,服务器程序是c语言的。 客户端要用perl. 每次发送数据时,先发送4字节的数据长度,服务器端会判断收到的长度是否为4字节。如果为4字节,则将其作为将要收取数据包的长度。那么如果客户端要发送的包的长度为20,如何将这个长度发送出去,使服务器端收到4字节,并确定长度是20。
&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp
论坛徽章:0
syswrite即可
白手起家, 积分 12, 距离下一级还需 188 积分
论坛徽章:0
send也可以
丰衣足食, 积分 930, 距离下一级还需 70 积分
论坛徽章:0
$str=&test abcdefg&;
$len=length($str);
syswrite(SOCK,pack('L',$len)); ##发送模拟C中的Long Int的20,也即是0x14
syswrite(SOCK,pack('a'.$len,$str));&&##发送模拟C中的字符串,以null结尾
丰衣足食, 积分 930, 距离下一级还需 70 积分
论坛徽章:0
有一个问题需要注意:不同的主机系统,字节的顺序不同,尤其是在小型机的RISC芯片、SPARC芯片、PA芯片和PC的X86的字节存储顺序刚好相反,一个是高位在前,一个是高位在后;
我刚开始写server的时候,就差点被折磨死了,aix端一读取字节就认为是一个天文大数
[ 本帖最后由 sunbeat 于
23:40 编辑 ]
北京盛拓优讯信息技术有限公司. 版权所有 京ICP备号 北京市公安局海淀分局网监中心备案编号:22
广播电视节目制作经营许可证(京) 字第1234号
中国互联网协会会员&&联系我们:
感谢所有关心和支持过ChinaUnix的朋友们
转载本站内容请注明原作者名及出处扫二维码下载作业帮
2亿+学生的选择
下载作业帮安装包
扫二维码下载作业帮
2亿+学生的选择
IP地址由4组双字节的16进制数字组成,这句话对吗?1组就是8位了,即是1个字节,那么就是4个字节咯.如下为什么是双字节呢?求明确解释,希望用2进制和16进制解释啦,解释的通就行啦,这句话究竟该怎么解释呢.
扫二维码下载作业帮
2亿+学生的选择
一组16进制双字节,最小是00,最大是FF,如果换算成10进制就是0~255,有256个数,对应二进制正好是8位,即11 1111,IPv4中每一组的数字范围就是上述.
一组16进制双字节,这个双字节是指一组吗?不是一组一个字节吗?
一个字节是8位2进制=2位16进制=1组
那你说的一组16进制双字节是?。。这是最后一问额。。双字节就是16位2进制或4位16进制了,为啥叫一组双字节?
那个说错了,2位16进制是1个字节。
为您推荐:
其他类似问题
扫描下载二维码

我要回帖

更多关于 qt 通过字节序发int 的文章

 

随机推荐