当前位置: 首页 > article >正文

C# 5000 转16进制 字节(激光器串口通讯生成指定格式命令)

        最近在做一个与激光器用串口进行通讯的程序文档中要求将频率参数以3个字节的方式进行发送。这里记录一下过程。以便以后再有类似问题时可以快速解决。

        

/// <summary>
        /// 设置频率
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnSetHz_Click(object sender, EventArgs e)
        {
            //设置PRF:PRF xxxx<CR><LF>
            try
            {
                //[00][02][00][11][D#1][D#2][CS][CS][0D]
                if (!string.IsNullOrEmpty(txtHz.Text.Trim()))
                {
                    var command = "[00][03][00][21]";
                    int valueInt = -1;
                    int.TryParse(txtHz.Text.Trim(), out valueInt);
                    if (valueInt > 0)
                    {
                        valueInt = valueInt * 1000;
                        var hexStrByteSUm = 03 + 00 + 21;
                        string hexString = valueInt.ToString("X6"); //转换为6位十六进制,前面填充0,数字6表示需求的长度
                        byte[] byteArray = new byte[3];
                        for (int i = 0; i < 3; i++)
                        {
                            byte bit = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
                            byteArray[i] = bit;
                            hexStrByteSUm += bit;
                            command += "[" + hexString.Substring(i * 2, 2) + "]";
                        }
                        //command += "[" + hexStrByteSUm.ToString("X2") + "]";//校验和 16进制
                        command += "[" + hexStrByteSUm % 256 + "]";//前面所有字节的和(模256)。这个校验和用于确保命令在传输过程中没有出错。
                        command += "[0D]";
                        AddListViewThread(null, "设置频率 发送:" + command, Color.Blue);
                        //[00][03][00][21][07][A1][20][E0][0D]
                        serialPortLaser.Write(command);
                    }
                    else
                    {
                        MessageBox.Show("输入的值无效!");
                    }
                }
                else
                {
                    MessageBox.Show("频率不能为空!");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("频率异常!msg:" + ex.Message);
            }
        }

        在C#中,可以使用ToString方法将整数转换为其十六进制表示的字符串,并使用Convert.ToString方法将整数转换为指定基数的字符串。对于转换为十六进制字节表示,需要首先确定整数的字节表示形式,通常是4个字节。

以下是将5000转换为其十六进制字节表示的示例代码:

using System;
 
class Program
{
    static void Main()
    {
        int number = 5000;
        string hexString = number.ToString("X8"); // 转换为8位十六进制,前面填充0
        byte[] byteArray = new byte[4];
        for (int i = 0; i < 4; i++)
        {
            byteArray[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
        }
 
        Console.WriteLine(BitConverter.ToString(byteArray).Replace("-", " "));
    }
}
这段代码首先将整数5000转换为8位十六进制字符串(前面填充0以确保总是4个字节),然后将每两个十六进制字符转换为字节,并最终以字节数组的形式输出。BitConverter.ToString用于以可读格式输出字节数组,Replace用于将输出中的连字符换成空格。

       

 


http://www.kler.cn/a/399686.html

相关文章:

  • HTML之列表学习记录
  • “fc-async”提供了基本的异步处理能力
  • FastGPT部署通义千问Qwen和智谱glm模型|OneAPI配置免费的第三方API
  • Halcon HImage 与 Qt QImage 的相互转换(修订版)
  • 正则表达式语法详解(python)
  • 基于 CentOS7.6 的 Docker 下载常用的容器(MySQLRedisMongoDB),解决拉取容器镜像失败问题
  • 【汇编语言】数据处理的两个基本问题(二) —— 解密汇编语言:数据长度与寻址方式的综合应用
  • Spring Boot汽车资讯:科技与汽车的对话
  • 雷达图像用dB使图像细节更好
  • Mysql-DQL条件查询
  • AI在电商平台中的创新应用:提升销售效率与用户体验的数字化转型
  • Docker Compose部署Kafka(非Zookeeper​)
  • apache2配置多站点
  • 品牌如何利用大数据工具,进行消费者洞察分析?
  • dnaMethyAge包学习笔记
  • nodejs入门(1):nodejs的前后端分离
  • ✅DAY27贪心算法 | 455.分发饼干 | 376. 摆动序列 | 53. 最大子序和
  • 认证鉴权框架SpringSecurity-6--6.x版本升级篇
  • IQ Offset之工厂实例分析
  • 一文简单了解Android中的input流程
  • QT5.14*解决QSslSocket::connectToHostEncrypted: TLS initialization faile
  • 网络常用特殊地址-127.0.0.1
  • SRP 实现 Cook-Torrance BRDF
  • 网络物理隔离技术
  • 一文了解清楚oracle数据库undo表空间
  • 前端人之网络通信概述