MSComm控件在进行串口通讯时发送端发送的是字符怎么把接受/发送字符以16进制显示???请各位帮帮忙了! ( 积分: 100 )

  • 主题发起人 主题发起人 君无际
  • 开始时间 开始时间

君无际

Unregistered / Unconfirmed
GUEST, unregistred user!
MSComm控件在进行串口通讯时发送端发送的是字符怎么把接受/发送字符以16进制显示??请各位帮帮忙了!
小弟初弄串口 最好友源码 junwuji2006@163.com
 
大家帮忙呀 谢谢 呵呵 急用
 
没法理解你说的。你可以使用ord()把你的字符串先转换成int,然后使用hex()就可以显示成16进制了。
 
真的是不懂你的意思!!

显示发送的字符作什么?

MSComm控件没有以16进制显示这个选项,接收的字符想以16进制显示必须手动写!

还有就是 MSComm 的 InputMode 属性!

comInputModeText 0 (缺省)通过 Input 属性以文本方式取回数据。
comInputModeBinary 1 通过 Input 属性以二进制方式检取回数据。
 
我是要侦听串口 总不能给客户显示乱码吧 所以要把接受到的数据以16进制串的形式显示
 
下面是我用C#写的和校验计算工具的一段代码: 用户在textBoxIn输入一个十六进制数串,程序在textBoxOut文本框中输出和校验的十六进制形式

private void textBoxIn_TextChanged(object sender, EventArgs e)
{
char[] charArray = textBoxIn.Text.ToCharArray();
int sum = 0;
for (int i = 0; i < charArray.Length; )
{
char l, h = charArray;
if (h == ' ')
{
i++;
continue;
}
i++;
if (i >= charArray.Length)
break;
l = charArray;
if (HexCharToValue(h) == 16 || HexCharToValue(l) == 16)
break;
else
sum += HexCharToValue(h) * 16 + HexCharToValue(l);
i++;
}
textBoxOut.Text = textBoxIn.Text + &quot; &quot; + sum.ToString(&quot;X&quot;);
}

private char HexCharToValue(char c)
{
if ((c >= '0') &amp;&amp; (c <= '9'))
return (char)(c - 0x30);
else if ((c >= 'A') &amp;&amp; (c <= 'F'))
return (char)(c - 'A' + 10);
else if ((c >= 'a') &amp;&amp; (c <= 'f'))
return (char)(c - 'a' + 10);
else
return (char)16;
}
 
你最好是把发送的字符串每个字符都转成ASCII码,作十六进制发送,再串口另一头用Byte数据接收,收到的其实是ASCII码值.再转成十六进制形式.或者不用转,就把ASCII码值还原就是了.
 
for I := 0 to length(你收到或者发送的字符串) do
inttohex(ord(你收到或者发送的字符串),2)
 
我发送的是指令,怎么是以字符串发送的 如‘01 FF’
为什么不其作用 该怎么发送指令呀? 谢谢各位大侠!
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部