用C#一步步写串口通信
- 格式:doc
- 大小:278.00 KB
- 文档页数:26
C语言心形编程代码的原理及应用1. 简介C语言是一种高级程序设计语言,拥有广泛的应用领域。
其中,心形编程代码是一种常见的图形编程示例,它通过C语言编写代码在控制台上生成一个心形图案。
本文将介绍心形编程代码的原理及应用。
2. 心形编程代码的原理心形编程代码的原理是通过在控制台上绘制符号字符来生成心形图案。
具体步骤如下:2.1 设置控制台画布首先,需要将控制台的大小设置为适合显示心形图案的尺寸。
可以使用C语言提供的相关函数来获取控制台的大小并设置画布的尺寸。
2.2 绘制心形图案绘制心形图案的过程可以分为两个步骤,分别绘制上半部分和下半部分。
2.2.1 绘制上半部分上半部分的绘制可以通过使用一系列符号字符来实现。
可以根据心形的形状定义一个字符数组,数组中的每个元素表示一行字符。
每行字符的数量和上下两个点之间的距离有关,可以通过调整字符数组的元素来改变上半部分的形状。
2.2.2 绘制下半部分下半部分的绘制与上半部分类似,只需要将上半部分的符号字符按照相反的顺序进行绘制即可。
2.3 显示心形图案绘制完成后,需要将生成的心形图案显示在控制台上。
可以使用C语言提供的输出函数将绘制好的图案输出到控制台。
3. 心形编程代码的应用心形编程代码具有一定的应用价值,可以用于表达情感、制作贺卡等场景。
3.1 表达情感通过生成心形图案,可以用简单的代码表达深深的情感。
将心形编程代码应用于情人节礼物、生日祝福等场景,可以给人一种特殊的感受。
3.2 制作贺卡心形图案可以作为一种简单而特别的贺卡设计元素。
通过在控制台上生成心形图案,可以制作个性化的贺卡,为亲朋好友送上温馨祝福。
3.3 学习图形编程心形编程代码可以作为学习图形编程的一个案例,对初学者来说非常友好。
通过理解和修改心形编程代码,可以熟悉C语言的基本语法和控制台绘图的原理。
4. 总结本文介绍了C语言心形编程代码的原理及应用。
通过在控制台上绘制符号字符,可以生成美观的心形图案。
c语言数位之积数位之积是指一个数的各个位上的数字相乘所得到的结果。
在C语言中,我们可以通过一些算法和技巧来计算一个数的数位之积。
本文将介绍几种常见的方法来实现这个功能。
一种简单直观的方法是使用循环和取余运算来逐位提取数字,然后累乘得到最终结果。
具体步骤如下:1. 首先,我们需要定义一个变量来保存结果,初始值设为1,因为任何数乘以1都等于它本身。
2. 然后,我们使用一个循环来逐位提取数字。
循环的条件可以是当输入的数不为0时继续执行。
3. 在循环中,我们使用取余运算(%)来获得每一位上的数字,将其累乘到结果中。
4. 在每次循环结束后,我们将输入的数除以10,以便下一次循环时可以提取下一位的数字。
5. 最后,当循环结束时,我们就得到了输入数的数位之积。
下面是使用C语言编写的示例代码:```c#include <stdio.h>int main() {int num, digit, product = 1;printf("请输入一个正整数: ");scanf("%d", &num);while (num != 0) {digit = num % 10;product *= digit;num /= 10;}printf("数位之积为: %d\n", product);return 0;}```在上面的代码中,我们首先使用`scanf`函数来获取用户输入的数,然后通过循环和取余运算来逐位提取数字并计算数位之积,最后使用`printf`函数将结果输出到屏幕上。
除了上面的方法,我们还可以使用递归来实现数位之积的计算。
递归是一种通过调用自身的方式来解决问题的方法。
具体步骤如下:1. 首先,我们需要定义一个递归函数来计算数位之积。
函数的参数可以是输入的数和当前的乘积,返回值为最终的乘积。
2. 在函数内部,我们首先判断输入的数是否为0,如果是,则返回当前的乘积作为结果;否则,执行下一步。
c语言最简单的程序C语言是一种非常简洁和高效的编程语言,因此,用C语言编写的最简单的程序也是非常简单的。
在这篇文章中,我将向大家介绍一个以C语言编写的最简单的程序。
我们需要知道C语言程序的基本结构。
一个C语言程序通常由预处理指令、全局变量、函数和语句组成。
而在这个最简单的程序中,我们只需要一个函数和一条简单的语句。
我们先来看看这个最简单的C语言程序的代码:```c#include <stdio.h>int main() {printf("Hello, World!\n");return 0;}```这个程序非常简洁,只有几行代码。
让我们来逐行解析一下。
我们使用了`#include <stdio.h>`这条预处理指令。
这个指令告诉编译器在编译过程中引入`stdio.h`头文件,这个头文件包含了一些输入输出函数,比如`printf`函数。
接下来,我们定义了一个名为`main`的函数。
在C语言中,`main`函数是程序的入口点,也就是程序从这里开始执行。
`int`是函数的返回类型,表示这个函数返回一个整数值。
在这个程序中,我们使用了`printf`函数来输出一个字符串`"Hello, World!\n"`。
`printf`函数的作用是将格式化的数据输出到标准输出设备,比如屏幕。
我们使用`return 0;`语句来结束程序。
`return 0;`表示程序执行成功,并返回一个值为0的整数。
这个返回值可以被操作系统用来判断程序是否执行成功。
现在,我们已经完成了这个最简单的C语言程序的编写。
接下来,我们需要使用编译器将这个程序编译成可执行文件。
在Windows 系统中,我们可以使用MinGW或者Visual Studio等编译器。
在Linux系统中,我们可以使用GCC编译器。
假设我们将这个程序保存为`hello.c`文件,我们可以使用以下命令来编译这个程序:```gcc hello.c -o hello```这个命令将会把`hello.c`文件编译成一个名为`hello`的可执行文件。
c语言逆序输出整数逆序输出整数是一种常见的程序设计问题,通常可以通过使用循环和取模运算来实现。
在C语言中,我们可以使用以下代码来实现逆序输出整数:```c#include <stdio.h>void reversePrint(int num) {while (num > 0) {int digit = num % 10;printf("%d", digit);num /= 10;}}int main() {int num;printf("请输入一个整数:");scanf("%d", &num);printf("逆序输出整数为:");reversePrint(num);printf("\n");return 0;}```以上代码中,我们定义了一个`reversePrint`函数,用于逆序输出整数。
函数内部使用了一个循环,每次取出整数的最后一位数字并输出,然后将整数除以10,重复此过程直到整数变为0。
在`main`函数中,我们首先提示用户输入一个整数,然后调用`reversePrint`函数进行逆序输出。
下面,我将对以上代码进行详细解析,并探讨一些与逆序输出整数相关的问题。
**1. 问题的提出**逆序输出整数是一种常见的程序设计问题,它要求我们将输入的整数的各个数字按照相反的顺序输出。
例如,如果输入整数为1234,则逆序输出为4321。
这个问题在实际中有很多应用场景,比如密码学中的数字颠倒、数字翻转等。
**2. 解决方法**为了实现逆序输出整数,我们可以使用循环和取模运算。
具体步骤如下:- 首先,我们定义一个函数`reversePrint`,它的参数是一个整数。
- 在`reversePrint`函数内部,我们使用一个循环来不断取出整数的最后一位数字并输出。
- 每次循环中,我们使用取模运算符`%`来获取整数的最后一位数字,然后使用`printf`函数输出。
c语言中等腰三角形的表示(原创实用版)目录1.引言2.等腰三角形的定义和性质3.C 语言中表示等腰三角形的方法4.实例:使用 C 语言编写等腰三角形程序5.结论正文【引言】在几何学中,等腰三角形是指两边长度相等的三角形。
在编程中,我们可以使用 C 语言来绘制和表示等腰三角形。
本文将介绍如何在 C 语言中表示等腰三角形以及一个实例程序。
【等腰三角形的定义和性质】等腰三角形是指两边长度相等的三角形,这两边被称为腰,与腰不相等的边被称为底。
等腰三角形有两个顶角相等,底角等于两个顶角的一半。
等腰三角形具有一些特殊的性质,如高、中线和角平分线重合,即顶角的平分线、底边的中线和高重合。
【C 语言中表示等腰三角形的方法】在 C 语言中,我们可以使用循环和条件语句来表示等腰三角形。
一般方法是先确定三角形的底边长度,然后根据底边长度计算出等腰三角形的高,接着计算出每个顶点的坐标,最后使用循环和条件语句绘制等腰三角形。
【实例:使用 C 语言编写等腰三角形程序】下面是一个使用 C 语言编写的等腰三角形程序示例:```c#include <stdio.h>int main() {int base, height, side;printf("请输入等腰三角形的底边长度:");scanf("%d", &base);printf("请输入等腰三角形的高:");scanf("%d", &height);side = (base * (height * 2)) / (2 * height); // 计算等腰三角形的腰长printf("等腰三角形的三个顶点坐标分别为:");printf("(%d, %d)", 0, height);printf("(%d, %d)", side, 0);printf("(%d, %d)", (side * 2) - base, height);return 0;}```运行上述程序,根据提示输入底边长度和高,程序将输出等腰三角形的三个顶点坐标。
c语言中停车场收费金额计算代码停车场收费金额计算是一个常见的问题,特别是在城市中心或商业区,停车场的收费是必不可少的。
而在实际生活中,为了准确计算收费金额,我们通常会使用C语言来编写相关的程序。
在C语言中,我们可以使用变量、运算符和控制语句来实现停车场收费金额的计算。
首先,我们需要定义一些变量来存储相关的信息,比如停车时长、收费标准等。
然后,我们可以使用运算符来进行计算,最后通过控制语句来输出计算结果。
在停车场收费计算中,关键的因素之一是停车时长。
通常情况下,我们会根据停车时长来确定收费金额。
假设停车场的收费标准是每小时5元,那么我们可以根据停车时长来计算收费金额。
我们需要定义一个变量来存储停车时长,假设我们将其命名为"parkingTime"。
然后,我们可以使用C语言中的运算符来计算停车时长对应的收费金额。
具体的计算公式是:收费金额= 停车时长* 单价。
根据我们的假设,单价为5元,所以我们可以将公式修改为:收费金额 = 停车时长 * 5。
在C语言中,乘法运算可以使用"*"符号来表示。
接下来,我们可以使用控制语句来输出计算结果。
在C语言中,我们可以使用printf函数来输出结果。
假设我们将输出的内容命名为"totalAmount",那么我们可以使用以下代码来实现输出功能:```cprintf("停车时长:%d小时\n", parkingTime);printf("收费金额:%d元\n", totalAmount);```在上述代码中,%d是C语言中的格式控制符,用于输出整数类型的变量。
通过使用格式控制符,我们可以将变量的值嵌入到输出的字符串中,从而实现输出功能。
除了停车时长,停车场还可能根据其他因素来确定收费金额,比如停车场类型、停车场位置等。
在实际应用中,我们可以根据具体需求来扩展代码,以实现更加复杂的收费计算功能。
c语言在txt每一行后面加逗号C语言可以通过使用文件操作函数,在读取文本文件的每一行后面加上逗号。
下面我们将详细介绍如何使用C语言实现这个功能。
我们需要打开一个文本文件,通常使用fopen函数来完成。
fopen 函数需要传入两个参数,第一个参数是文件路径,第二个参数是打开文件的模式。
模式可以是"r"表示只读模式,"w"表示写模式,"a"表示追加模式等。
在这个问题中,我们需要读取文本文件并在每一行后面添加逗号,因此我们使用只读模式打开文件。
下面是打开文件的示例代码:```c#include <stdio.h>int main() {FILE *file = fopen("input.txt", "r");if (file == NULL) {printf("无法打开文件\n");return 1;}//处理文件内容fclose(file);return 0;}```接下来,我们需要逐行读取文件内容并在每一行后面添加逗号。
可以使用fgets函数来完成这个任务。
fgets函数需要传入三个参数,第一个参数是目标数组,第二个参数是读取的最大字符数,第三个参数是文件指针。
fgets函数每次读取一行文本,将其存储到目标数组中。
下面是逐行读取文件并在每行后面添加逗号的示例代码:```cchar line[1000];while (fgets(line, sizeof(line), file)) {//去除行尾换行符char *newline = strchr(line, '\n');if (newline != NULL) {*newline = '\0';}//添加逗号strcat(line, ",");//输出结果printf("%s\n", line);}```在上述代码中,我们使用了strchr函数来找到行尾的换行符,并修改其为字符串结束符'\0'。
c语言求长方形的面积和周长长方形是一种常见的几何形状,具有独特的性质和特点。
在数学中,我们可以通过计算来求得长方形的面积和周长。
本文将以C语言为工具,探讨如何使用编程语言计算长方形的面积和周长。
我们需要了解长方形的定义。
长方形是一种具有四条边的四边形,其中对边两两平行且长度相等。
长方形的两条相邻边相互垂直,因此也可以看作是一个特殊的平行四边形。
这些特点将对我们计算面积和周长提供便利。
在C语言中,我们可以使用变量和运算符来实现对长方形面积和周长的计算。
首先,我们需要定义长方形的长和宽两个变量,分别表示长方形的边长。
假设我们将长方形的长定义为length,宽定义为width。
接下来,我们可以使用以下公式来计算长方形的面积和周长:面积 = 长× 宽周长= 2 × (长 + 宽)在C语言中,我们可以使用赋值运算符和算术运算符来实现这两个计算过程。
具体代码如下所示:#include <stdio.h>int main() {// 定义长方形的长和宽int length = 5;int width = 3;// 计算长方形的面积和周长int area = length * width;int perimeter = 2 * (length + width);// 输出结果printf("长方形的面积为:%d\n", area);printf("长方形的周长为:%d\n", perimeter);return 0;}在上述代码中,我们首先使用变量length和width分别表示长方形的长和宽,并进行了赋值操作。
然后,我们使用乘法运算符计算长方形的面积,将结果赋给变量area。
接着,我们使用加法和乘法运算符计算长方形的周长,将结果赋给变量perimeter。
我们使用printf函数将计算结果输出到屏幕上。
通过格式化字符串,我们可以在输出时显示相应的信息,使结果更加清晰明了。
c语言三角形面积计算C语言是一门广泛使用的计算机编程语言,它被广泛应用于各种领域,包括科学、工程、游戏开发和计算机图形学等。
在学习C语言编程的过程中,我们需要掌握一些基本的数学知识,如三角形的面积计算。
本文将介绍如何使用C语言计算三角形的面积。
一、三角形的面积公式三角形是一个由三条线段组成的图形,其中任意两条线段都可以组成一个角。
三角形的面积是指由三个顶点所组成的平面图形的大小。
计算三角形的面积需要使用以下公式:S = 1/2 * b * h其中,S表示三角形的面积,b表示三角形底边的长度,h表示三角形高的长度。
这个公式是从三角形的底边和高的概念出发推导出来的,因此在计算三角形面积时,需要知道三角形的底边和高的长度。
二、使用C语言计算三角形面积在C语言中,可以使用变量和表达式来计算三角形的面积。
首先,我们需要定义一个变量来存储三角形的底边和高的长度。
例如,我们可以定义两个变量b和h来分别表示三角形的底边和高的长度。
float b, h;接下来,我们需要从用户那里获取三角形的底边和高的值。
可以使用scanf函数来实现:printf('请输入三角形的底边长度:');scanf('%f', &b);printf('请输入三角形的高:');scanf('%f', &h);在获取了底边和高的值之后,我们可以使用上面提到的公式来计算三角形的面积。
可以定义一个变量S来存储计算结果:float S = 0.5 * b * h;最后,我们可以使用printf函数将计算结果输出到屏幕上:printf('三角形的面积为:%.2f', S);这里使用了%.2f来表示浮点数的输出格式,其中.2表示保留两位小数。
三、完整的C语言程序下面是一个完整的C语言程序,用于计算三角形的面积:#include <stdio.h>int main(){float b, h, S;printf('请输入三角形的底边长度:');scanf('%f', &b);printf('请输入三角形的高:');scanf('%f', &h);S = 0.5 * b * h;printf('三角形的面积为:%.2f', S);return 0;}四、总结本文介绍了如何使用C语言计算三角形的面积,包括三角形面积公式、C语言的变量和表达式以及完整的C语言程序。
c语言三点坐标求三角形面积标题:用C语言计算三角形面积引言:在几何学中,计算三角形面积是一个基本问题。
本文将介绍使用C 语言编写程序来计算三角形面积的方法。
通过这个过程,你将了解如何使用C语言中的数学运算和变量来解决几何学问题。
让我们开始吧!1. 导入必要的头文件为了使用C语言中的数学函数和变量类型,我们需要导入头文件。
在这个程序中,我们将使用math.h头文件。
2. 定义三点坐标三角形由三个点组成,每个点都有x和y坐标。
我们可以使用结构体来表示这些坐标。
首先,我们定义一个名为Point的结构体,它包含两个浮点数类型的变量x和y。
3. 输入三个点的坐标接下来,我们需要从用户那里获取三个点的坐标。
我们可以使用scanf函数来实现这一点。
对于每个点,我们将提示用户输入x和y 坐标,并将它们存储在Point结构体变量中。
4. 计算三角形的边长我们可以使用两点之间的距离公式来计算三角形的边长。
对于三个点A(x1, y1)、B(x2, y2)和C(x3, y3),边AB的长度可以通过以下公式计算:AB = sqrt((x2 - x1)^2 + (y2 - y1)^2)。
5. 计算三角形的半周长半周长可以通过三角形的边长之和除以2来计算。
为了计算半周长,我们需要使用上一步计算出的三个边长。
6. 计算三角形的面积三角形的面积可以通过海伦公式来计算。
海伦公式如下所示:面积= sqrt(s * (s - a) * (s - b) * (s - c)),其中a、b和c分别表示三角形的三边长,s表示半周长。
7. 输出结果我们将计算出的三角形面积打印到屏幕上,以便用户查看。
结论:通过本文,我们学习了如何使用C语言来计算三角形的面积。
我们首先定义了一个Point结构体来表示三个点的坐标,然后从用户那里获取了这些坐标。
接下来,我们使用数学公式计算了三角形的边长、半周长和面积,并将结果打印到屏幕上。
这个程序可以帮助我们更好地理解C语言中的数学运算和变量使用。
我们来看具体的实现步骤。
公司要求实现以下几个功能:1):实现两台计算机之前的串口通信,以16进制形式和字符串两种形式传送和接收。
2):根据需要设置串口通信的必要参数。
3):定时发送数据。
4):保存串口设置。
看着好像挺复杂,其实都是纸老虎,一戳就破,前提是你敢去戳。
我尽量讲的详细一些,争取说到每个知识点。
在编写程序前,需要将你要测试的COM口短接,就是收发信息都在本地计算机,短接的方式是将COM口的2、3号针接起来。
COM 口各针的具体作用,度娘是这么说的:COM口。
记住2、3针连接一定要连接牢固,我就是因为接触不良,导致本身就不通,白白花掉了一大半天时间调试代码。
下面给出主要的操作界面,如下:顺便,我将所有控件对应的代码名字也附上了,相信对初学者来说,再看下面的代码会轻松很多。
控件名字命名的方法是“控件名+作用”的形式,例如“打开串口”的开关按钮,其名字是btnSwitch (btn就是button的简写了)。
我认为这种命名控件的方式比较好,建议大家使用,如果你有好的命名方式,希望你能告诉我!下面我们将各个功能按照从主到次的顺序逐个实现。
(我分块给出代码实现,详细代码见链接:《C#串口通信工具》)一、获取计算机的COM口总个数,将它们列为控件cbSerial的候选项,并将第一个设为cbSerial的默认选项。
这部分是在窗体加载时完成的。
请看代码:(很多信息代码的注释里讲的很清楚,我就不赘述了。
)[csharp]view plaincopyprint?1.//检查是否含有串口2. string[] str = SerialPort.GetPortNames();3. if (str == null)4. {5. MessageBox.Show("本机没有串口!", "Error");6. return;7. }8.9. //添加串口项目10. foreach (string s in System.IO.Ports.SerialPort.GetPortNames())11. {//获取有多少个COM口12. cbSerial.Items.Add(s);13. }14.15. //串口设置默认选择项16. cbSerial.SelectedIndex = 0; //设置<span style="font-size:18px; "><strong>cbSerial的默认选项</strong></span>二、“串口设置”这面我没代码编程,直接从窗体上按照串口信息设置就行。
我们仅设置它们的默认选项,但这里我用到了ini文件,暂时不讲,我们先以下面形式设置默认。
[csharp]view plaincopyprint?1. cbBaudRate.SelectedIndex = 5;2. cbDataBits.SelectedIndex = 3;3. cbStop.SelectedIndex = 0;4. cbParity.SelectedIndex = 0;5. radio1.Checked = true; //发送数据的“16进制”单选按钮(这里我忘了改名,现在看着很不舒服!)6. rbRcvStr.Checked = true;三、打开串口在发送信息之前,我们需要根据选中的选项设置串口信息,并设置一些控件的属性,最后将串口打开。
[csharp]view plaincopyprint?1. private void btnSwitch_Click(object sender, EventArgs e)2. {3.<span style="white-space:pre"> </span>//sp1是全局变量。
SerialPort sp1 = new SerialPort();4. if (!sp1.IsOpen)5. {6. try7. {8. //设置串口号9. string serialName = cbSerial.SelectedItem.T oString();10. sp1.PortName = serialName;11.12. //设置各“串口设置”13. string strBaudRate = cbBaudRate.T ext;14. string strDateBits = cbDataBits.T ext;15. string strStopBits = cbStop.Text;16. Int32 iBaudRate = Convert.ToInt32(strBaudRate);17. Int32 iDateBits = Convert.ToInt32(strDateBits);18.19. sp1.BaudRate = iBaudRate; //波特率20. sp1.DataBits = iDateBits; //数据位21. switch (cbStop.Text) //停止位22. {23. case "1":24. sp1.StopBits = StopBits.One;25. break;26. case "1.5":27. sp1.StopBits = StopBits.OnePointFive;28. break;29. case "2":30. sp1.StopBits = StopBits.Two;31. break;32. default:33. MessageBox.Show("Error:参数不正确!", "Error");34. break;35. }36. switch (cbParity.T ext) //校验位37. {38. case "无":39. sp1.Parity = Parity.None;40. break;41. case "奇校验":42. sp1.Parity = Parity.Odd;43. break;44. case "偶校验":45. sp1.Parity = Parity.Even;46. break;47. default:48. MessageBox.Show("Error:参数不正确!", "Error");49. break;50. }51.52. if (sp1.IsOpen == true)//如果打开状态,则先关闭一下53. {54. sp1.Close();55. }56. //状态栏设置57. tsSpNum.T ext = "串口号:" + sp1.PortName + "|";58. tsBaudRate.Text = "波特率:" + sp1.BaudRate + "|";59. tsDataBits.Text = "数据位:" + sp1.DataBits + "|";60. tsStopBits.Text = "停止位:" + sp1.StopBits + "|";61. tsParity.T ext = "校验位:" + sp1.Parity + "|";62.63. //设置必要控件不可用64. cbSerial.Enabled = false;65. cbBaudRate.Enabled = false;66. cbDataBits.Enabled = false;67. cbStop.Enabled = false;68. cbParity.Enabled = false;69.70. sp1.Open(); //打开串口71. btnSwitch.T ext = "关闭串口";72. }73. catch (System.Exception ex)74. {75. MessageBox.Show("Error:" + ex.Message, "Error");76. return;77. }78. }79. else80. {81. //状态栏设置82. tsSpNum.T ext = "串口号:未指定|";83. tsBaudRate.T ext = "波特率:未指定|";84. tsDataBits.T ext = "数据位:未指定|";85. tsStopBits.T ext = "停止位:未指定|";86. tsParity.T ext = "校验位:未指定|";87. //恢复控件功能88. //设置必要控件不可用89. cbSerial.Enabled = true;90. cbBaudRate.Enabled = true;91. cbDataBits.Enabled = true;92. cbStop.Enabled = true;93. cbParity.Enabled = true;94.95. sp1.Close(); //关闭串口96. btnSwitch.Text = "打开串口";97. }98. }四、发送信息因为这里涉及到字符的转换,难点在于,在发送16进制数据时,如何将文本框中的字符数据在内存中以同样的形式表现出来,例如我们输入16进制的“eb 90”显示到内存中,也就是如下形式:或输入我们想要的任何字节,如上面的“12 34 56 78 90”.内存中的数据时16进制显示的,而我们输入的数据时字符串,我们需要将字符串转换为对应的16进制数据,然后将这个16进制数据转换为字节数据,用到的主要方法是:Convert.ToInt32 (String, Int32);Convert.ToByte (Int32);这是我想到的,如果你有好的方法,希望你能告诉我。
下面看代码:[csharp]view plaincopyprint?1. private void btnSend_Click(object sender, EventArgs e)2. {3. if (!sp1.IsOpen) //如果没打开4. {5. MessageBox.Show("请先打开串口!", "Error");6. return;7. }8.9. String strSend = txtSend.T ext;10. if (radio1.Checked == true) //“16进制发送”按钮11. {12. //处理数字转换,目的是将输入的字符按空格、“,”等分组,以便发送数据时的方便(此处转的比较麻烦,有高见者,请指点!)13. string sendBuf = strSend;14. string sendnoNull = sendBuf.Trim();15. string sendNOComma = sendnoNull.Replace(',', ' '); //去掉英文逗号16. string sendNOComma1 = sendNOComma.Replace(',', ' '); //去掉中文逗号17. string strSendNoComma2 = sendNOComma1.Replace("0x", "");//去掉0x18. strSendNoComma2.Replace("0X", ""); //去掉0X19. string[] strArray = strSendNoComma2.Split(' ');20.21.<span style="white-space:pre"> </span>//strArray数组中会出现“”空字符的情况,影响下面的赋值操作,故将<span style="background-color: rgb(255, 255, 255); ">byteBufferLength相应减小</span>22. int byteBufferLength = strArray.Length;23. for (int i = 0; i <<span style="background-color: rgb(255, 255, 255); ">strArray.Length</span><span style="background-color: rgb(255, 255, 255); ">; i++ )</span>24. {25. if (strArray[i]=="")26. {27. byteBufferLength--;28. }29. }30.31. byte[] byteBuffer = new byte[byteBufferLength];32. int ii = 0;<span style="white-space:pre"> </span>//用于给<span style="background-color: rgb(255, 255, 255); ">byteBuffer赋值</span>33. for (int i = 0; i < strArray.Length; i++) //对获取的字符做相加运算34. {35.36. Byte[] bytesOfStr = Encoding.Default.GetBytes(strArray[i]);37.38. int decNum = 0;39. if (strArray[i] == "")40. {41. continue;42. }43. else44. {45. decNum = Convert.ToInt32(strArray[i], 16); //atrArray[i] ==12时,temp == 1846. }47.48. try //防止输错,使其只能输入一个字节的字符,即只能在txtSend里输入“eb 90”等字符串,不能输入“123 2345”等超出字节范围的数字49. {50. byteBuffer[ii] = Convert.ToByte(decNum);51. }52. catch (System.Exception ex)53. {54. MessageBox.Show("字节越界,请逐个字节输入!", "Error");55. return;56. }57.58. ii++;59. }60. sp1.Write(byteBuffer, 0, byteBuffer.Length);61. }62. else //以字符串形式发送时63. {64. sp1.WriteLine(txtSend.T ext); //写入数据65. }66. }五、数据的接收亮点来了,看到这里,如果你还没吐(可能是我的代码比较拙劣!),那么下面的知识点对你也不成问题。