我的Form上有100个CheckBox,通过串口将这100个CheckBox的ItemIndex发送出去,我原来做的程序是这
100个ItemIndex占100个字节,但现在要改,100个ItemIndex占20个字节,具体的协议是:
0 1 0 × × × × ×
例如:如果前五个CheckBox都选中的话,那第一个字节中的8位就是:0 1 0 1 1 1 1 1
每个字节的前三位固定是 0 1 0 ,后五位表示五个连续的CheckBox的选中情况。
我现在要问的是:怎样将这100个字节的数据通过协议转化为20个字节。
顺便说一下,程序已经作好了,这20个字节的数据是临时加上的。前面的数据发送的时候,
我已经将所有的数据定义到一个byte类型的数组里面。而且能实现预定的功能。
所以,主要问题就是把这100个ItemIndex转化为20个字节的byte类型的数据,
例如:如果第一个字节是01011111,那我就可以这样定义:byte[i] :=95,以此类推,总共20个字节。
快过年了,时间比较紧,还望各位大侠指点。谢谢!预祝各位新年快乐!
100个ItemIndex占100个字节,但现在要改,100个ItemIndex占20个字节,具体的协议是:
0 1 0 × × × × ×
例如:如果前五个CheckBox都选中的话,那第一个字节中的8位就是:0 1 0 1 1 1 1 1
每个字节的前三位固定是 0 1 0 ,后五位表示五个连续的CheckBox的选中情况。
我现在要问的是:怎样将这100个字节的数据通过协议转化为20个字节。
顺便说一下,程序已经作好了,这20个字节的数据是临时加上的。前面的数据发送的时候,
我已经将所有的数据定义到一个byte类型的数组里面。而且能实现预定的功能。
所以,主要问题就是把这100个ItemIndex转化为20个字节的byte类型的数据,
例如:如果第一个字节是01011111,那我就可以这样定义:byte[i] :=95,以此类推,总共20个字节。
快过年了,时间比较紧,还望各位大侠指点。谢谢!预祝各位新年快乐!
解决方案 »
- delphi 招聘 问哪几个问题 可知其水平?
- zhouzuoji(乌江恨)他才25岁,就死了!哎
- 输入法控制的问题:我在程序中可以控制输入的切换问题,但是为什么切换后都变成全角了?用什么方法可以将输入切换为半角?
- 一个 Delphi 的群:13830859
- 用DBGridEh处理从表的汇总
- paradox配置的数据库出了问题
- 关于TEdit的一个菜问题
- 奇怪的现象。到底是什么原因?
- 有用过FORM.PRINT的吗?打印结果是什么样的?
- 怎么让应用程序不出现在任务栏??
- 问个问题啊``在c++里的LPCTSTR*的类型,在delphi里怎样写?我要在delphi里传到c++里去的
- 求 获取稀疏文件实际占用空间的方法
A1 : array[0..99] of Byte;//如果这两个数组的下标不是从0开始的,要推算并修改下面的I,J用法
A2 : array[0..19] of Byte;
I,J: integer;
begin
fillChar(A1,100,1);//这句仅是我调试用的:把100个元素全部置为1,即“选中”
for I := low(A2) to High(A2) do
begin
A2[I] := 64;
for J := I*5 to I*5+4 do
A2[I] := A2[I] + (A1[J] shl (J-I*5));
end;
{ 至此,A2数组元素全部为95 }
end;
var
vBytes: array[0..20 - 1] of Byte;
vCheckBox: TCheckBox;
I: Integer;
begin
FillChar(vBytes, SizeOf(vBytes), 0);
for I := 0 to 100 - 1 do
begin
TComponent(vCheckBox) := FindComponent(Format('CheckBox%d', [I + 1]));
vBytes[I div 8] := vBytes[I div 8] or
(Ord(Assigned(vCheckBox) and vCheckBox.Checked) shl (7 - I mod 8));
end;
end;
数组每个元素初始化为2^6=64.
然后根据itemIndex判断该用哪个array[],即将checkbox分成了20组,每组5个
在每组里若第一个选中,则用array[] 按位或(or) 00000001($1),若第二个选中,则用array[] 按位或 00000010,若第三个选中,则用array[] 按位或 00000100,......
最后数组就是你要的.