求用delphi编写的LRC校验位算法函数,急!!!
求用delphi编写的LRC校验位算法函数,急!!!
某命令串为":010200000001FC"
其16进制为“3A 30 31 30 32 30 30 30 30 30 30 30 31 46 43 0D 0A”。其中第一个为起始符,2-13为数据,14-15即“FC”为LRC校验码,有人能写一个取得校验位的函数吗?
下边有一段用VC写的程序 将帧的内容,除去头代码,用十六进制表示,求和,模FF,然后取补码,以ASCII码表示即可。
例如:ASCII帧
3A 30 31 30 32 30 30 30 30 30 30 30 31 46 43 0D 0A
将校验内容用十六进制表示为:
00 01 00 02 00 00 00 00 00 00 00 01
将以上数值用十六进制求和,模FF:
00+01+00+02+00+00+00+00+00+00+00+01=04=0000 0100
取反:1111 1011
加1: 1111 1100
十六进制变换:F C
ASCII码:46 43
LRC就是这样算出来的这里有一段用C写的程序,有谁能用DELPHI写吗?
static unsigned char LRC(auchMsg,usDataLen)
unsigned char *auchMsg ; /* 要进行计算的消息 */
unsigned short usDataLen ; /* LRC 要处理的字节的数量*/
{ unsigned char uchLRC = 0 ; /* LRC 字节初始化 */
while (usDataLen--) /* 传送消息 */
uchLRC += *auchMsg++ ; /* 累加*/
return ((unsigned char)(-((char_uchLRC))) ;
}
解决方案 »
cvm
function GetLRC(AData: array of Byte; iLen: Integer): Byte;
var
iLoop : Integer;
begin
Result := 0;
for iLoop := 0 to iLen - 1 do Result := Result + AData[iLoop];
Result := Result xor $FF + 1;
end;procedure TForm1.FormCreate(Sender: TObject);
var
AData: array[0..5] of Byte;
iLRC : Byte;
begin
AData[0] := $01;
AData[1] := $02;
AData[2] := $00;
AData[3] := $00;
AData[4] := $00;
AData[5] := $01;
iLRC := GetLRC(AData, 6);
ShowMessage(IntToHex(iLRC,2));
end;
再多加个函数,可以直接获取类似楼主例子中的"010200000001FC"这个字符串:
function GetLRC(AData: array of Byte; iLen: Integer): Byte;
var
iLoop : Integer;
begin
Result := 0;
for iLoop := 0 to iLen - 1 do Result := Result + AData[iLoop];
Result := Result xor $FF + 1;
end;function GetHexString(AData: array of Byte; iLen: Integer): String;
var
iLoop: Integer;
begin
Result := '';
for iLoop := 0 to iLen - 1 do
Result := Result + IntToHex(AData[iLoop], 2);
Result := Result + IntToHex(GetLRC(AData, iLen), 2);
end;procedure TForm1.FormCreate(Sender: TObject);
var
AData: array[0..5] of Byte;
begin
AData[0] := $01;
AData[1] := $02;
AData[2] := $00;
AData[3] := $00;
AData[4] := $00;
AData[5] := $01;
ShowMessage(GetHexString(AData, 6));
end;
static byte LRC(byte[] data)
{
byte lrc = 0;
foreach (byte c in data)
{
lrc += c;
}
return (byte)-lrc;
}
求用delphi编写的LRC校验位算法函数,急!!!的更多相关文章
- 算法导论-求(Fibonacci)斐波那契数列算法对比
目录 1.斐波那契数列(Fibonacci)介绍 2.朴素递归算法(Naive recursive algorithm) 3.朴素递归平方算法(Naive recursive squaring) 4 ...
- c语言求回文数的三种算法的描述
c语言求回文数的三种算法的描述 题目描述 注意:(这些回文数都没有前导0) 1位的回文数有0,1,2,3,4,5,6,7,8,9 共10个: 2位的回文数有11,22,33,44,55,66,77,8 ...
- 转 : 用Delphi编写安装程序
http://www.okbase.net/doc/details/931 还没有亲自验证过,仅收藏 当你完成一个应用软件的开发后,那么你还需要为该软件做一个规范化的安装程序,这是程序设计的最后一步 ...
- delphi编写winsocket的流程
delphi编写winsocket的流程 1.在窗体创建的时候启用动态连接库(引用winsock) var aWSAData:TWSAData; if WSAStartup($0101, ...
- delphi编写dll心得, 谢谢原作者的分享。转
delphi编写dll心得 1.每个函数体(包括exports和非exports函数)后面加 'stdcall;', 以编写出通用的dll2.exports函数后面必须加'export;'(放在'st ...
- DELPHI编写服务程序总结
DELPHI编写服务程序总结 一.服务程序和桌面程序的区别 Windows 2000/XP/2003等支持一种叫做“系统服务程序”的进程,系统服务和桌面程序的区别是:系统服务不用登陆系统即可运行:系统 ...
- Qt调用Delphi编写的COM组件
这个问题捣鼓了两天,现在终于解决了,做个笔记分享给大家,以免走弯路 起初,我的想法是在DLL中写一个interface并从函数中导出这个interface,像这样的代码 ICom1 = interfa ...
- 利用Delphi编写Socket通信程序
一.Delphi与Socket 计算机网络是由一系列网络通信协议组成的,其中的核心协议是传输层的TCP/IP和UDP协议.TCP是面向连接的,通信双方保持一条通路,好比目前的电话线,使用telnet登 ...
- delphi编写与调用DLL(delphi7下测试通过)
http://blog.sina.com.cn/s/blog_4dbbf76f01000anz.html delphi编写DLL 下面在delphi中编写一个简单的dll,在该dll中只有一个max函 ...
随机推荐
- luogu3810 【模板】三维偏序(陌上花开)
ref1 ref2 ref3 ref4 #include <algorithm> #include <iostream> #include <cstdio> usi ...
- Python-S9-Day88——stark组件之设计urls
03 stark组件之设计urls 04 stark组件之设计urls2 05 stark组件之设计list_display 06 stark组件之z查看页面的数据展示 03 stark组件之设计ur ...
- PostgreSQL 配置内存参数
对于任何数据库软件,内存配置项都是很重要的配置项.在 PostgreSQL 主要有以下几个内存配置参数. shared_buffers: integer 类型,设置数据库服务器将使用的共享内存缓冲区数 ...
- [python工具][pycharm]pycharm licence activation失效的解决方法
推荐网站: http://idea.lanyus.com/ 1 请将“0.0.0.0 account.jetbrains.com”添加到C:\Windows\System32\Drivers\etc\ ...
- 用例UML图
用例图主要用来描述“用户.需求.系统功能单元”之间的关系.它展示了一个外部用户能够观察到的系统功能模型图. [用途]:帮助开发团队以一种可视化的方式理解系统的功能需求. 用例图中涉及的关系有:关联.泛 ...
- 树中两个结点的最低公共祖先--java
题目:对于任意一个树,不仅仅限于二叉树,求树中两个结点的最低公共祖先结点. 解析:对于任意一棵树,显然并不局限于二叉树,也就是说树的非叶子结点可能存在多个子节点.所以,我们可以定义两个链表结构,存储这 ...
- 山贼集团 (group)
山贼集团 (group) 题目描述 某山贼集团在绿荫村拥有强大的势力,整个绿荫村由N个连通的小村落组成,并且保证对于每两个小村落有且仅有一条简单路径相连.小村落用阿拉伯数字编号为1,2,3,4,-,n ...
- python和tensorflow安装
一.Python安装 python采用anaconda安装,简单方便,下载python3.6的anaconda linux64的sh安装文件. 1.bash Anaconda-2.1.0-Linux ...
- python相关的编码,运算
一 字符串的格式化 python中使用占位符%来实现. name=input('name:') age=input('age:') hobby=input('hobby:') print('%s的年龄 ...
- nodeJS学习(3)--- npm 配置和安装 express4.X 遇到的问题及解决
前言:懒得看前面两篇介绍的也可以从本节直接参考,但建议最好了解下,因为 4.X 的express 已经把命令行工具分离出来 (链接https://github.com/expressjs/genera ...