!高分请问【关于PB使用MsComm32.ocx控件输出16进制数的有关问题】


!!!高分请教

  C# code

   String ls_parm , ls_16jz Int li_10jz ls_parm = "0A1A2A3A4A5A6A7A8A9A"//16进制字符串 每两位是一个16进制字符 For i = 1 To Len(ls_parm) step 2 ls_16jz = Mid(ls_parm,i,2) li_10jz = gf_hextodec(ls_16jz) //先把16进制转换成10进制 ls_output = ls_output + Char(li_10jz) Next ole_1.object.output = ls_output gf_writelog(ls_output)//记录日志 用Minihex软件查看输出的16进制是多少


我记录了日志 通过串口传出16进制变成
0x0A 0x1A 0x2A 0x3A 0x4A 0x5A 0x6A 0x7A 0x3F 0x3F 

前面的都是好好的
最后两个 不知道为什么就变成转换成0x3F了


  C# code

   String ls_parm , ls_16jz Int li_10jz ls_parm = "7376787980"//16进制字符串 每两位是一个16进制字符 For i = 1 To Len(ls_parm) step 2 ls_16jz = Mid(ls_parm,i,2) li_10jz = gf_hextodec(ls_16jz) //先把16进制转换成10进制 ls_output = ls_output + Char(li_10jz) Next ole_1.object.output = ls_output gf_writelog(ls_output)//记录日志 用Minihex软件查看输出的16进制是多少


我记录了日志 通过串口传出16进制变成
0x73 0x76 0x78 0x79 0x3F

通过我检测发现 16进制的字符 79 以前输出的都可以用
等到 16进制 80 输出又变成 0x3F 


总结:
一个16进制字符
如果是一个字母 一个数字 组合的 肯定不行
如果是两个数字的组合 只要前面那个数字超过8 又不行了



高手请教这是怎么回事


串口输出16进制数据到底该怎么处理






PowerBuilder语言基础 PowerBuilder 程序开发

asaad 11 years, 2 months ago


String lsparm , ls16jz
Int li10jz

ls
parm = "0A1A2A3A4A5A6A7A8A9A"//16进制字符串 每两位是一个16进制字符
For i = 1 To Len(lsparm) step 2
ls
16jz = Mid(lsparm,i,2)
li
10jz = gfhextodec(ls16jz) //先把16进制转换成10进制
lsoutput = lsoutput + Char(li10jz)
Next
ole
1.object.output = lsoutput

gf
writelog(lsoutput)//记录日志 用Minihex软件查看输出的16进制是多少

问题出在这两行代码上
li
10jz = gfhextodec(ls16jz) //先把16进制转换成10进制
lsoutput = lsoutput + Char(li_10jz)


swim125 answered 11 years, 2 months ago


如果帐号被盗,请试一下找回方式

せっる千秋 answered 11 years, 2 months ago


<fieldset> <legend> 探讨 </legend>
这个和pb无关,pb支持unicode,估计ocx对unicode处理有问题。ocx可以别的方式输入吗,一般有text和16位码的方式。你试着别用文本输入方式。
</fieldset>


doomer answered 11 years, 2 months ago


这个和pb无关,pb支持unicode,估计ocx对unicode处理有问题。ocx可以别的方式输入吗,一般有text和16位码的方式。你试着别用文本输入方式。

qdcat answered 11 years, 2 months ago


<fieldset> <legend> 探讨 </legend>
PB12.5中有byte数据类型,用byte类型吧,不要用char了。
</fieldset>


乱跑D蛋挞 answered 11 years, 2 months ago


PB12.5中有byte数据类型,用byte类型吧,不要用char了。

Amitie answered 11 years, 2 months ago


我是楼主
我的帐号也黑了,通过邮箱也找不回密码,今天已经向希赛发邮件

叫他们人工找回了

我昨天还用得好好的,真晕


苍白的正义 answered 11 years, 2 months ago


char的范围是128,超过这个数就不好用了

你是按单字节输出的,单个字节最多是127,转成十六进制就是7F,你想输出8F,肯定不行,你可以分成两个字节来处理,你试试以下代码

lsparm = "0A1A2A3A4A5A6A7A8A9A"//16进制字符串 每两位是一个16进制字符
For i = 1 To Len(ls
parm) step 2
ls16jz = Mid(lsparm,i,2)
li10jz = gfhextodec(ls16jz) //先把16进制转换成10进制
if li
10jz > 127 then
lsoutput += char(gfhextodec(mid(lsparm, i, 1)))
ls
output += char(gfhextodec(mid(lsparm, i, 2)))
else
lsoutput = lsoutput + Char(li_10jz)
end if
Next


level·5 answered 11 years, 2 months ago


不知你的PB是什么版本,因为7A转为10进制是122,8A转为10进制是138,超过了char的范围

txhhkd answered 11 years, 2 months ago

Your Answer