- C# code
String ls_parm , ls_16jzInt li_10jzls_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)Nextole_1.object.output = ls_outputgf_writelog(ls_output)//记录日志 用Minihex软件查看输出的16进制是多少
我记录了日志 通过串口传出16进制变成
0x0A 0x1A 0x2A 0x3A 0x4A 0x5A 0x6A 0x7A 0x3F 0x3F
前面的都是好好的
最后两个 不知道为什么就变成转换成0x3F了
- C# code
String ls_parm , ls_16jzInt li_10jzls_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)Nextole_1.object.output = ls_outputgf_writelog(ls_output)//记录日志 用Minihex软件查看输出的16进制是多少
我记录了日志 通过串口传出16进制变成
0x73 0x76 0x78 0x79 0x3F
通过我检测发现 16进制的字符 79 以前输出的都可以用
等到 16进制 80 输出又变成 0x3F
总结:
一个16进制字符
如果是一个字母 一个数字 组合的 肯定不行
如果是两个数字的组合 只要前面那个数字超过8 又不行了
高手请教这是怎么回事
串口输出16进制数据到底该怎么处理
------解决方案--------------------
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进制是多少
问题出在这两行代码上
li_10jz = gf_hextodec(ls_16jz) //先把16进制转换成10进制
ls_output = ls_output + Char(li_10jz)
------解决方案--------------------
不知你的PB是什么版本,因为7A转为10进制是122,8A转为10进制是138,超过了char的范围
------解决方案--------------------
char的范围是128,超过这个数就不好用了
你是按单字节输出的,单个字节最多是127,转成十六进制就是7F,你想输出8F,肯定不行,你可以分成两个字节来处理,你试试以下代码
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进制
if li_10jz > 127 then
ls_output += char(gf_hextodec(mid(ls_parm, i, 1)))
ls_output += char(gf_hextodec(mid(ls_parm, i, 2)))
else
ls_output = ls_output + Char(li_10jz)
end if
Next
------解决方案--------------------
我是楼主
我的帐号也黑了,通过邮箱也找不回密码,今天已经向CSDN发邮件
叫他们人工找回了
我昨天还用得好好的,真晕
------解决方案--------------------
PB12.5中有byte数据类型,用byte类型吧,不要用char了。
------解决方案--------------------
------解决方案--------------------
这个和pb无关,pb支持unicode,估计ocx对unicode处理有问题。ocx可以别的方式输入吗,一般有text和16位码的方式。你试着别用文本输入方式。
------解决方案--------------------
------解决方案--------------------
如果帐号被盗,请试一下找回方式
http://topic.csdn.net/u/20111223/21/2DF1EFC5-5C8A-4517-993B-6FD0817C248F.html