C#串口通讯中 16进制与字符串、字节数组之间的转换

2023-11-07

1.c#中如何将十进制数的字符串转化成十六进制数的字符串

//十进制转二进制
Console.WriteLine("十进制166的二进制表示: "+Convert.ToString(166, 2));
//十进制转八进制
Console.WriteLine("十进制166的八进制表示: "+Convert.ToString(166, 8));
//十进制转十六进制 
Console.WriteLine("十进制166的十六进制表示: "+Convert.ToString(166, 16));
//二进制转十进制
Console.WriteLine("二进制 111101 的十进制表示: "+Convert.ToInt32("111101", 2));
//八进制转十进制
Console.WriteLine("八进制 44 的十进制表示: "+Convert.ToInt32("44", 8));
//十六进制转十进制
Console.WriteLine("十六进制 CC的十进制表示: "+Convert.ToInt32("CC", 16));

2.在串口通讯过程中,经常要用到 16进制与字符串、字节数组之间的转换


 private string StringToHexString(string s,Encoding encode)
         {
             byte[] b = encode.GetBytes(s);//按照指定编码将string编程字节数组
             string result = string.Empty;
             for (int i = ; i < b.Length; i++)//逐字节变为16进制字符,以%隔开
             {
                 result += "%"+Convert.ToString(b[i], );
             }
             return result;
         }
         private string HexStringToString(string hs, Encoding encode)
         {
             //以%分割字符串,并去掉空字符
             string[] chars = hs.Split(new char[]{'%'},StringSplitOptions.RemoveEmptyEntries);
             byte[] b = new byte[chars.Length];
             //逐个字符变为16进制字节数据
             for (int i = ; i < chars.Length; i++)
             {
                 b[i] = Convert.ToByte(chars[i], );
             }
             //按照指定编码将字节数组变为字符串
             return encode.GetString(b);
         }
字符串转16进制字节数组
        /// <summary>
        /// 字符串转16进制字节数组
        /// </summary>
       /// <param name="hexString"></param>
        /// <returns></returns>
        private static byte[] strToToHexByte(string hexString)
        {
             hexString = hexString.Replace(" ", "");
           if ((hexString.Length % 2) != 0)
                 hexString += " ";
            byte[] returnBytes = new byte[hexString.Length / 2];
            for (int i = 0; i < returnBytes.Length; i++)
                returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
            return returnBytes;
         }
字节数组转16进制字符串
 /// <summary>
         /// 字节数组转16进制字符串
         /// </summary>
         /// <param name="bytes"></param>
         /// <returns></returns>
         public static string byteToHexStr(byte[] bytes)
        {
             string returnStr = "";
             if (bytes != null)
             {
                 for (int i = ; i < bytes.Length; i++)
                 {
                      returnStr += bytes[i].ToString("X2");
                  }
              }
             return returnStr;
          }
从汉字转换到16进制
 /// <summary>
         /// 从汉字转换到16进制
         /// </summary>
         /// <param name="s"></param>
         /// <param name="charset">编码,如"utf-8","gb2312"</param>
         /// <param name="fenge">是否每字符用逗号分隔</param>
        /// <returns></returns>
         public static string ToHex(string s, string charset, bool fenge)
         {
             if ((s.Length % ) != )
             {
                  s += " ";//空格
                 //throw new ArgumentException("s is not valid chinese string!");
              }
              System.Text.Encoding chs = System.Text.Encoding.GetEncoding(charset);
             byte[] bytes = chs.GetBytes(s);
             string str = "";
             for (int i = ; i < bytes.Length; i++)
             {
                 str += string.Format("{0:X}", bytes[i]);
                 if (fenge && (i != bytes.Length - ))
                 {
                      str += string.Format("{0}", ",");
                  }
              }
             return str.ToLower();
          }
16进制转换成汉字
///<summary>
        /// 从16进制转换成汉字
        /// </summary>
        /// <param name="hex"></param>
        /// <param name="charset">编码,如"utf-8","gb2312"</param>
       /// <returns></returns>
        public static string UnHex(string hex, string charset)
        {
           if (hex == null)
                throw new ArgumentNullException("hex");
             hex = hex.Replace(",", "");
             hex = hex.Replace("\n", "");
             hex = hex.Replace("\\", "");
             hex = hex.Replace(" ", "");
            if (hex.Length % 2 != 0)
            {
                 hex += "20";//空格
             }
            // 需要将 hex 转换成 byte 数组。
            byte[] bytes = new byte[hex.Length / 2];
 
           for (int i = 0; i < bytes.Length; i++)
            {
                try
                {
                    // 每两个字符是一个 byte。
                     bytes[i] = byte.Parse(hex.Substring(i * 2, 2),
                     System.Globalization.NumberStyles.HexNumber);
                 }
                catch
                {
                    // Rethrow an exception with custom message.
                    throw new ArgumentException("hex is not a valid hex number!", "hex");
                 }
             }
             System.Text.Encoding chs = System.Text.Encoding.GetEncoding(charset);
            return chs.GetString(bytes);
         }

转自:https://www.bbsmax.com/A/ZOJPPaxaJv/

串口通讯,发送你的串口信息:https://blog.csdn.net/weixin_45023328/article/details/108128883

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C#串口通讯中 16进制与字符串、字节数组之间的转换 的相关文章

随机推荐

  • HiBlock社区:区块链链上数据的认知与探索

    跨界知识聚会系列文章 知识是用来分享和传承的 各种会议 论坛 沙龙都是分享知识的绝佳场所 我也有幸作为演讲嘉宾参加了一些国内的大型会议 向大家展示我所做的一些成果 从听众到演讲感觉是不一样的 把知识分享出来 你才能收获更多 关于作者 张丹
  • Pycharm常用快捷键及设置

    Pycharm 一 Pycharm常用快捷键 二 常用设置 1 代码提示忽略大小写敏感 2 滚轮缩放和自动换行 包括编辑栏和控制台 3 字体与代码配色 仅供参考 一 Pycharm常用快捷键 Ctrl 行注释 Ctrl D 复制选定的区域或
  • 【electron】应用在线升级

    流程 1 设置feedUrl 每次登录应用后更新feedUrl 如果需要灰度测试 可以添加uuid的参数 由服务端判断是否命中 注意 feedUrl需要在checkUpdate之前调用 主进程 初始化 private cancellatio
  • U3D客户端框架之 音效管理器 与 Fmod介绍安装导入Unity

    一 Fmod介绍与安装导入Unity 1 Fmod与Unity内置Audio播放器对比 Unity内置的Audio底层使用的是FMOD 但是功能不够齐全 高级一点的功能如混合 Mix 等无法使用 音效管理应该和Unity工程解耦合 这样子可
  • Python中处理异常和错误

    作为一种强大且灵活的编程语言 Python 提供了许多机制来处理程序运行过程中可能出现的异常和错误 本文将详细介绍如何在 Python 中以 优雅 高效 的方式进行异常处理 并提供实用技巧帮助开发者更好地应对各种情况 无论您是初学者还是有经
  • 单相桥式全控整流电路

    单相全控桥式带电阻负载时的电路 带电阻负载的工作情况 电路分析 闸管VT1和VT4组成一对桥臂 VT2和VT3组成另一对桥臂 在u2正半周 即a点电位高于b点电位 若4个晶闸管均不导通 id 0 ud 0 VT1 VT4串联承受电压u2 在
  • linux echo彩色打印

    定义了三个颜色 把打印的内容加载头和尾巴之间即可 pt head green 033 32 1m pt head red 033 31 1m pt head yellow 033 33 1m pt tail 033 0m echo pt h
  • STM32学习笔记-大小端模式详解

    最低有效字节在最前端的方式 小端法 最高有效字节在最前端的方式 大端法 小端模式 Little Endian 小端模式 Little Endian 也称为Intel顺序 最低有效字节 首先存储 例如 int16数据0x0123467在地址单
  • vue3:使用:图片生成二维码并复制

    实现在 vue3 中根据 url 生成一个二维码码 且可以复制 注 复制功能 navigator clipboard write 只能在安全的localhost 这种安全网络下使用 https中需要添加安全证书 且在域名 例 https w
  • 打印二维、多行的PDF-417条形码控件PDF417 Fonts and Encoder

    PDF417 Fonts and Encoder条形码控件使您可以在带有支持TrueType BDF FON SFP PCL laserjet soft PostScript type 1 Binary及PostScript ASCII字体
  • Qt QT_WIDGETS_LIB宏

    如果定义了QT WIDGETS LIB 那么应用程序的对象就是QApplication 如果定义了QT GUI LIB 那么应用程序的对象就是QGuiApplication 否则 应用程序的对象就是QCoreApplication 如果使用
  • 入门机器学习(西瓜书+南瓜书)贝叶斯分类器总结(python代码实现)

    入门机器学习 西瓜书 南瓜书 贝叶斯分类器总结 python代码实现 一 贝叶斯分类器 1 1 通俗理解 先来看两个公式 P A B P
  • redis的五种数据类型详细图解

    众所周知 redis有五种数据类型 string 字符串 lists 列表 sets 无序的字符串集合 zsets 有序的字符串集合 hashs 哈希类型 一 string 字符串类型 在Redis中字符串类型的Value最多可以容纳的数据
  • vue 列表自动滚动到制定位置

    背景 业务开发中遇到一个需求 是要求跳转到新页面 并默认选中内容 如果内容在列表的位置靠后 就需要滚动到可见范围内 实现 1 循环实现列表 为每个item添加id id item index 方便后续查找对应项 div class item
  • Python作业(实验一)

    目录 1 输入一个日期 包括年 月和日 计算该日期是这一年的第几天 2 输入三个整数 把这三个整数按从大到小的顺序输出 3 分别用while语句和for语句编写程序 计算整数100到1000的和 4 随机生成两个1000到10000之间的整
  • HttpCanary使用指南——静态注入器

    HttpCanary更多资料 点我 静态注入器是HttpCanary最强大的功能之一 可以实现对Http请求数据和响应数据的拦截修改 静态注入器需要先选定一个请求 然后对其进行预编辑 编辑完成后便可对后续的相同请求进行自动修改 比如App发
  • 第二章 开始学习C++

    1 C 代码基本结构 以下是仿照C 在Microsoft Visual C 敲击的代码 对于新入门的我来说 能从中间学到一个完整的C 程序框架 test cpp 此文件包含 main 函数 程序执行将在此处开始并结束 include
  • linux服务器登录慢,报“/usr/bin/xauth: timeout in locking authority file /home/idriver-slave/.Xauthority”

    linux服务器登录慢 报 usr bin xauth timeout in locking authority file home idriver slave Xauthority 解决方法 1 查看用户目录的权限 cd home ll
  • 执行ipconfig -renew命令时出错: 系统找不到指定的文件?

    一位同事的戴尔台式电脑上不了网 执行 ipconfig renew时提示 在释放接口 Loopback Pseudo Interface 1 时出错 系统找不到指定的文件 操作失败 没有适配器处于允许此操作的状态 解决办法就是修复Winso
  • C#串口通讯中 16进制与字符串、字节数组之间的转换

    1 c 中如何将十进制数的字符串转化成十六进制数的字符串 十进制转二进制 Console WriteLine 十进制166的二进制表示 Convert ToString 166 2 十进制转八进制 Console WriteLine 十进制