求用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函 ...
随机推荐
- js中123==123为false的问题--写成123=="123"即可解决问题
项目中遇到过一个问题,js拿到后台返回的一个数字,在if中判断时,出现类似123==123为false的结果, 初步分析原因,应该是返回的是string类型的,但拿来比较的是个number类型的,所以 ...
- 1 - JVM随笔分类(java虚拟机的内存区域分配(一个不断记录和推翻以及再记录的一个过程))
java虚拟机的内存区域分配 在JVM运行时,类加载器ClassLoader在加载到类的字节码后,交由jvm的执行引擎处理, 执行过程中需要空间来存储数据(类似于Cpu及主存),此时的这段空间的分 ...
- navigationBar 设置关于setTranslucent
在ios7中, 如果setTranslucent=yes 默认的 则状态栏及导航栏底部为透明的,界面上的组件应该从屏幕顶部开始显示,因为是半透明的,可以看到,所以为了不和状态栏及导航栏重叠,第一个 ...
- nyoj 题目19 擅长排列的小明
擅长排列的小明 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 小明十分聪明,而且十分擅长排列计算.比如给小明一个数字5,他能立刻给出1-5按字典序的全排列,如果你想 ...
- PYTHON资源入口汇总
Python资源入口汇总 官网 官方文档 教程和书籍 框架 数据库 模板 工具及第三方包 视频 书籍 博客 经典博文集合 社区 其他 整理中,进度30% 官网 入口 官方文档 英文 document ...
- [Python]Pandas简单入门(转)
本篇文章转自 https://colab.research.google.com/notebooks/mlcc/intro_to_pandas.ipynb?hl=zh-cn#scrollTo=zCOn ...
- POJ 1990:MooFest(树状数组)
题目大意:有n头牛,第i头牛声调为v[i],坐标为x[i],任意两值牛i,j沟通所需的花费为abs(x[i]-x[j])*max(v[i],v[j]),求所有牛两两沟通的花费. 分析: 我们将奶牛按声 ...
- CTSC2018 旅游记
我即使是死了,尸体烂在棺材里,也要用这腐朽的声音喊出: LJCCF!!!! DAY -3 体育中考AK了! 顿时感觉中考稳了(虽然竞赛已经特招) 新目标:我要用三种方式考上SZMS! DAY -1 成 ...
- 重绘(repaints)与重排(reflows)
当页面布局和几何属性改变时就需要"重排" 避免在修改样式的过程中使用 offsetTop, scrollTop, clientTop, getComputedStyle() 这些属性, 它们都会刷新渲 ...
- 【CCF】URL映射 模拟
#include<iostream> #include<cstdio> #include<cstring> #include<string> #incl ...