var
CardID: array[0..5] of Byte;
for j := 0 to 5 do
begin
CardName := CardName + format('%1x', [(CardID[j] shr 4) and $0F]); //右移4
CardName := CardName + format('%1x', [CardID[j] and $0F]);
end;哪位兄弟帮忙解释一下。
CardID: array[0..5] of Byte;
for j := 0 to 5 do
begin
CardName := CardName + format('%1x', [(CardID[j] shr 4) and $0F]); //右移4
CardName := CardName + format('%1x', [CardID[j] and $0F]);
end;哪位兄弟帮忙解释一下。
解决方案 »
- 登录画面点击取消时地址非法访问错误
- 请问怎样得到一个控件最顶层的Parent(就是TForm)?
- 谁可以提供一份完整的vclskin3?
- 写一下自己在分布式开发的经验,与大家分享之一:关于连接 内有散分贴
- TTreeView如何做到类似VB的Node.key和node.tag?
- 哪里有WIN XP里的IE全部图标下载?
- 急,急,急什万火急,总么样在DELPHI的DLL的单元中调用与执行其窗体的各种事件,有源码的给出示例,回答者都有分,我的EM:[email protected]
- 各位大哥,小弟做个按纽,要完成的功能是把dbgrid中的选择出来的数据导出到access中,小弟用的是sql server!请各位指教!在线等!
- 请问微软的ACCESS2000哪里有的下载呢??????????????
- delphi创建数据库出错,创建表也是这个错误,请高手解决下
- delphi语法错误操作符丢失
- 求checklist控件与数据关联的方法
begin
CardName:=cardName+IntToHex(CardID[j],2);
end;
相当于取CardID[j]得高四位
[CardID[j] and $0F]
相当于取CardID[j]得低四位CardName应该等于 CardID[0]到CardID[5]的高四位和低四位之和
但最后究竟做什么得看只这些代码看不出来
CardID: array[0..5] of Byte;
for j := 0 to 5 do
begin
CardName := CardName + format('%1x', [(CardID[j] shr 4) and $0F]); //右移4
CardName := CardName + format('%1x', [CardID[j] and $0F]);
end;
================================================
只看j=0 哈。假如CardID[0]等于195;二进制为 11000011;十六进制为$C3;
第一句:
CardID[0] shr 4 ;右移4位,得到00111100;00001100 and $0F 位运算,就是 00111100 和 00001111做and运算,得到00001100,也就是取低四位的运算,而得到的就是CardID[0]的高四位
第二句:
[CardID[0] and $0F 取低四位得到00000011;,将得到的数用format转为16进制字符串这两行的代码总的结果就是 先去CardID[0]的高四位,用format转为16进制表示,保存在字符串CardName 里,再取CardID[0]的低四位,追加到CardName 的后面所以呢如果CardID[0]等于195;那一个循环下来,CardName 里就保存了字符串'C3',6次循环下来就保存了CardID的整个16进制字符串了。简单点就是实现将PByte类型转为16进制形式的String类型。。
var
CardID: array[0..5] of Byte;
for j := 0 to 5 do
begin
CardName := CardName + format('%1x', [(CardID[j] shr 4) and $0F]); //shr 向右移位操作,此处and $0F多余;
//假定CardID[j] := 11110000,输出结果为1111
CardName := CardName + format('%1x', [CardID[j] and $0F]); //取一个字节的低四位;假定CardID[j] := 11110000,输出结果为0000
end;
循环出来输出一组数据,就是把高四位和低四位分离出来!