C# 串口通信转十六进制问题

天河之上 2016-05-03 11:18:24
因为串口之间需要用到十六进制,所以需要把数据转换。
我现在提交上的数据有 \t 符号,比如:1234\t1234\t\t
用了以下方法转换,但是出现报错:
buffer[i / 2] = (byte)Convert.ToSByte(s.Substring(i, 2), 16); // “为找到任何可识别的字符”
请问大神们该如何修改


private byte[] HexStringToByteArray(string s) //16进制字符串到数组之间的相互转换
{
s = s.Replace(" ", "");
byte[] buffer = new byte[s.Length / 2];
for (int i = 0; i < s.Length; i += 2)
buffer[i / 2] = (byte)Convert.ToSByte(s.Substring(i, 2), 16);
return buffer;
}
private string ByteArrayToHexString(byte[] data)
{
StringBuilder sb = new StringBuilder(data.Length * 3);
foreach (byte b in data)
sb.Append(Convert.ToString(b, 16).PadLeft(2, '0'));
return sb.ToString().ToUpper();
}

...全文
312 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
天河之上 2016-05-03
  • 打赏
  • 举报
回复
引用 1 楼 chuheiqian 的回复:
首先你上传的是16进制数据,那么整个\t字符是几个意思,其次,就算你不知道有啥理由在16进制字符串里插入了\t,那么,在解析的时候,你是不是得去掉然后再转? 实在是搞不懂楼主的想法。
我在想如何把符号转十六进制,比如空格什么的
倒退一天 2016-05-03
  • 打赏
  • 举报
回复
首先你上传的是16进制数据,那么整个\t字符是几个意思,其次,就算你不知道有啥理由在16进制字符串里插入了\t,那么,在解析的时候,你是不是得去掉然后再转? 实在是搞不懂楼主的想法。
倒退一天 2016-05-03
  • 打赏
  • 举报
回复
引用 2 楼 baidu_23617079 的回复:
[quote=引用 1 楼 chuheiqian 的回复:] 首先你上传的是16进制数据,那么整个\t字符是几个意思,其次,就算你不知道有啥理由在16进制字符串里插入了\t,那么,在解析的时候,你是不是得去掉然后再转? 实在是搞不懂楼主的想法。
我在想如何把符号转十六进制,比如空格什么的[/quote] 原来是这样,你可以先将字符转成字节(字符编码自己定) byte[] bytes= System.Text.Encoding.ASCII.GetBytes("要转的字符串"); StringBuilder sb = new StringBuilder(); foreach (byte b in bytes) { sb.Append(b.ToString("X2")); } sb.ToString();
lccleo 2016-05-03
  • 打赏
  • 举报
回复
我明白了 你的意思 你上想把 符号用ascii码转成对应的16进制的整型 比如ascII码表的33(十进制)是字符“!” 你想发出去 0x21 对吧?

            char heh = '!';
            byte[] aa = {0};
            aa[0] = (byte)heh;
            SerialPort sp = new SerialPort();
            sp.Write(aa, 0, 1);
试试这个 你看看发出来的是不是 0x21

111,128

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧