当前位置: 代码迷 >> PB >> 各位大侠,PB的2进制转换16进制有关问题。
  详细解决方案

各位大侠,PB的2进制转换16进制有关问题。

热度:125   发布时间:2016-04-29 09:27:37.0
各位大侠,PB的2进制转换16进制问题。在线等。
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]
  相关解决方案