PB 用 ReadFile(iu_File,ls_Buff,lu_NumBytes,lu_BytesRead,lstr_locstruct)读取端口2进制BCD数据
然后转换成16进制字符。
怎么转换的有问题。好像有的数据没有转换成功。转换的数据和端口调试助手的数据不一样。
这个事转换函数:
请指教。
函数 1 。
//=============================================================================
// Function: of_BcdToSTR()
//-----------------------------------------
// Description: 检查串口参数是否初始化成功
// 备注: BCD码数值采用压缩格式,用一个字节来存放两位数字.
// 数值99BCD码的存储方法如下(以数值99压缩后的表现为例):
// 二进制表示 1001 1001
// ASCII码字符表示 153
// 十六进制字符表示 0x99
// 压缩存储是采用把一个字节分成两部分来存储数据,高4位和低4位
// 各存储一位数字
// PB中二进制操作不方便,所以本方法采用将ASCII值转为16进制字符取其
// 两位数字的方法.
//-----------------------------------------
// Aagument: Integer ai_BcdByte 字符的ASCII值
//-----------------------------------------
// Return: Integer 转换后的数值
//=============================================================================
String ls_HexStr
//IF IsNull(ai_BcdByte) OR ai_BcdByte = 0 Then
// ls_HexStr = '00'
//ELSE
// ls_HexStr = of_Hex(ai_BcdByte)//将ASCII码转换为16进制字符表示
//END IF
ls_HexStr = of_Hex(ai_BcdByte)//将ASCII码转换为16进制字符表示
Return ls_HexStr
----------------------------------------------
函数 2 。
//=============================================================================
// Function: of_Hex()
//-----------------------------------------
// Description: 转换integer到16进制字符串
//-----------------------------------------
// Aagument: Integer pssl
//-----------------------------------------
// Return: 16进制字符串 ls_Char
//=============================================================================
String vs,vstmp,ls_Char
Integer vi1,vilen,i,vimod,viy,visl
Char ls_he[6]
vilen = Len(String(ai_pssl)) //长度
vimod = Mod(ai_pssl,16) //取余数
visl = ai_pssl //赋值
IF vimod >= 0 Then
vstmp = String(vimod)
//IF vstmp = '0' Then vstmp = '00'
IF vstmp = '10' Then vstmp = 'A'
IF vstmp = '11' Then vstmp = 'B'
IF vstmp = '12' Then vstmp = 'C'
IF vstmp = '13' Then vstmp = 'D'
IF vstmp = '14' Then vstmp = 'E'
IF vstmp = '15' Then vstmp = 'F'
ls_he[1] = vstmp
END IF
FOR i = 1 TO vilen + 1
viy = Truncate(visl/16,0)
IF viy > 0 Then
vstmp = String(viy)
//IF vstmp = '0' Then vstmp = '00'
IF vstmp = '10' Then vstmp = 'A'
IF vstmp = '11' Then vstmp = 'B'
IF vstmp = '12' Then vstmp = 'C'
IF vstmp = '13' Then vstmp = 'D'
IF vstmp = '14' Then vstmp = 'E'
IF vstmp = '15' Then vstmp = 'F'
ls_he[i+1] = vstmp
END IF
IF viy = 0 Then Exit
visl = viy
NEXT
ls_Char = ''
IF IsNull(ls_he[6]) OR ls_he[6] = '' Then
ls_Char = ls_Char
ELSE
ls_Char = ls_Char + ls_he[6]
END IF
IF IsNull(ls_he[5]) OR ls_he[5] = '' Then
ls_Char = ls_Char
ELSE
ls_Char = ls_Char + ls_he[5]