串口调试助手可以发送十六进制和字符串,如果发送的命令是ascii怎么办呢,

字符串和ascii是不一样的把,怎么可以让单片机和一个支持串口通信的设备通信,哪个设备只能接收ascii,我用单片机发送给他的时候,应该是什么格式呢,ascii码一位即可,命令是2,3...9就这样的,单个数字

3个回答

ascii是字符编码,字符编码构成的序列称之为字符串。你作为上位机,把字符串分为一个一个字符逐个发给它就可以了。

int i = 2;
char a = (char)('0' + i);

字符串就是ascii编码,单个数字就发单个ascii码,转换下就可以

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
JS十六进制字符串转字符串问题

## 我在做一个服务器用MQTT协议与DTU终端通讯,发送modbus指令,DTU接收到指令后下发给plc,来控制灯泡的问题。 现在要发送的modbus请求帧是“01 05 00 02 FF 00 2D FA”,这是一段十六进制字符串。 我通过这样一个函数hexToString = function (hex) { var hex = hex.toString(); var str = ''; for (var i = 0; i < hex.length; i += 2) str += String.fromCharCode(parseInt(hex.substr(i, 2), 16)); return str; }; 将这段modbus请求帧转成字符串,然后下发给DTU. 然后问题来了,用串口软件监听DTU接收的消息内容,翻译成十六进制之后 这段请求帧变成了“01 05 00 02 C3 BF 00 2D C3 BA”![图片说明](https://img-ask.csdn.net/upload/201906/14/1560501772_690458.png) 这是什么原因呢?是hexToString函数不对吗?我在网上也找了很多十六进制字符串转字符串的函数代码,跟我这个差不多,我也都调试过,都没有解决这个问题。这究竟是什么问题? 求大神!!!

qt 串口通信 write 写16进制数据

龚建伟老师编写的串口调试助手里面有个十六进制的发送和接收功能,不知道有没有哪位尝试过在QT里面实现同样的功能?就是对于类似“02e3a2f5d6”的字符串作为一个十六进制字符串发送,而不是作为普通的字符串发送,我看了他写的源代码,里面有一个字符串转换函数,这个函数可以直接拿过来用,但是使用qextserialport类进行发送的时候,出现了一点小问题,就是当字符的ASCII码值大于127时,会将最高位省略,比如发送"f5",收到的字符转换为十六进制后变成"75",如果你们有兴趣,可以帮我看看,十分感谢!!

用串口调试助手给单片机以字符串的形式发送数据时,结尾是不默认添加'\0'的

这个你们知道吗?如果我今天才知道,说明什么,你们是通过什么途径知道的,

stm32串口调试助手乱码

用stm32写了个串口程序 上位机发送一个数字 返回一个数字,可是返回的是些不认识的字符,波特率已经同步9608 数据停止位 等都是一样的,tx接rx 还是乱 换了3个串口调试助手都是一样的,有谁知道,谢谢解答

51单片机中的串口通信发送10(16进制)以上显示不正确

串口通信中,向单片机发送数据控制LED灯亮实验中 发01,02、04、08 依次是 第1 2 3 4 个灯亮 而发送 10 就成第5 6 个一起亮了,然后发20 、40 是第7 和 第 8 个; 发 80 就全灭了 , 这是啥情况啊。 #include<reg51.h> unsigned char a,flag; void init(); void main() { init(); while(1) { if(flag == 1) { ES = 0; P0 = a; ES = 1; flag = 0; } } } void init() { TMOD = 0x20; TH1 = 0xfa; TL1 = 0xfa; TR1 = 1; // T1开始工作 REN = 1; //允许串口接收 SM0 = 0; SM1 = 1; //选择串口的工作方式 EA = 1; //中断总开关 ES = 1; // 开串口中断 } void ext() interrupt 4 { RI = 0; a = SBUF; flag = 1; } 今天下午调了一下程序: 发现是波特率的问题: 4800 的 波特率 这样设置就有问题 ![图片说明](https://img-ask.csdn.net/upload/201504/05/1428215125_69022.png) 这样设置就没事。 ![图片说明](https://img-ask.csdn.net/upload/201504/05/1428215097_172620.jpg) 不过为啥是这个情况....

java的rxtx串口通信怎么接收16进制数据

package Cilent; import gnu.io.CommPortIdentifier; import gnu.io.NoSuchPortException; import gnu.io.PortInUseException; import gnu.io.SerialPort; import gnu.io.SerialPortEvent; import gnu.io.SerialPortEventListener; import gnu.io.UnsupportedCommOperationException; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Enumeration; import java.util.Timer; import java.util.TimerTask; import java.util.TooManyListenersException; import javax.print.attribute.standard.PrinterMessageFromOperator; public class SendTest implements SerialPortEventListener{ protected static CommPortIdentifier portid = null; //通讯端口标识符 protected static SerialPort comPort = null; //串行端口 protected int BAUD = 9600; //波特率 protected int DATABITS = SerialPort.DATABITS_8;; //数据位 protected int STOPBITS = SerialPort.STOPBITS_1; //停止位 protected int PARITY = SerialPort.PARITY_NONE; //奇偶检验 private static OutputStream outputStream; //输出流 private static InputStream inputStream; //输入流 private static byte[] readBuffer = new byte[1024]; // 4k的buffer空间,缓存串口读入的数据 StringBuilder buf = new StringBuilder(128); public static void main(String[] args) { SendTest my = new SendTest(); my.setSerialPortNumber(); sendMsg(); } //读取所有串口 private void listPortChoices() { CommPortIdentifier portId; Enumeration en = CommPortIdentifier.getPortIdentifiers(); // iterate through the ports. while (en.hasMoreElements()) { portId = (CommPortIdentifier) en.nextElement(); if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) { System.out.println(portId.getName()); } } } //设置串口号 private void setSerialPortNumber() { String osName = null; String osname = System.getProperty("os.name", "").toLowerCase(); if (osname.startsWith("windows")) { // windows osName = "COM1"; } System.out.println(osName); try { portid = CommPortIdentifier.getPortIdentifier(osName); // portid = CommPortIdentifier.getPortIdentifier(Port); if(portid.isCurrentlyOwned()){ System.out.println("端口在使用"); }else{ comPort = (SerialPort) portid.open(this.getClass().getName(), 1000); } } catch (PortInUseException e) { System.out.println("端口被占用"); e.printStackTrace(); } catch (NoSuchPortException e) { System.out.println("端口不存在"); e.printStackTrace(); } try { inputStream = comPort.getInputStream(); //从COM1获取数据 outputStream = comPort.getOutputStream(); } catch (IOException e) { e.printStackTrace(); } try { comPort.addEventListener(this); //给当前串口增加一个监听器 comPort.notifyOnDataAvailable(true); //当有数据是通知 } catch (TooManyListenersException e) { e.printStackTrace(); } try { //设置串口参数依次为(波特率,数据位,停止位,奇偶检验) comPort.setSerialPortParams(this.BAUD, this.DATABITS, this.STOPBITS, this.PARITY); } catch (UnsupportedCommOperationException e) { System.out.println("端口操作命令不支持"); e.printStackTrace(); } } //将输入的16进制string转成字节 public static byte[] hexStringToBytes(String hexString) { if (hexString == null || hexString.equals("")) { return null; } hexString = hexString.toUpperCase(); int length = hexString.length() / 2; char[] hexChars = hexString.toCharArray(); byte[] d = new byte[length]; for (int i = 0; i < length; i++) { int pos = i * 2; d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1])); } return d; } private static byte charToByte(char c) { return (byte) "0123456789ABCDEF".indexOf(c); } //向串口发送信息方法 public static void sendMsg(){ String msg="71340001";//要发送的命令msg try { outputStream.write(hexStringToBytes(msg)); } catch (IOException e) { e.printStackTrace(); } } //字节转换成十六进制字符串 public static String bytesToHexString(byte[] src){ StringBuilder stringBuilder = new StringBuilder(""); if (src == null || src.length <= 0) { return null; } for (int i = 0; i < src.length; i++) { int v = src[i] & 0xFF; String hv = Integer.toHexString(v); if (hv.length() < 2) { stringBuilder.append(0); } stringBuilder.append(hv); } return stringBuilder.toString(); } @Override public void serialEvent(SerialPortEvent event) { switch (event.getEventType()) { case SerialPortEvent.BI://Break interrupt,通讯中断 case SerialPortEvent.OE://Overrun error,溢位错误 case SerialPortEvent.FE://Framing error,传帧错误 case SerialPortEvent.PE://Parity error,校验错误 case SerialPortEvent.CD://Carrier detect,载波检测 case SerialPortEvent.CTS://Clear to send,清除发送 case SerialPortEvent.DSR://Data set ready,数据设备就绪 case SerialPortEvent.RI://Ring indicator,响铃指示 case SerialPortEvent.OUTPUT_BUFFER_EMPTY: break; case SerialPortEvent.DATA_AVAILABLE:// 当有可用数据时读取数据,并且给串口返回数据 try { // 多次读取,将所有数据读入 while (inputStream.available() > 0) { System.out.println("接收数据:"+((byte) inputStream.read())); } } catch ( IOException e ) { e.printStackTrace(); } break; } } } 各位大神,现在做的项目是往cpld发送指令控制,发送16进制的指令需要接收cpld返回的16进制数据判断指令是否正确执行,这是按照网上的例子写的,现在解决了发送指令,但是接收部分不知道如何接收16进制的返回数据,用串口调试助手往com1发送16进制数据只能显示2位的10进制,请问如何将接收的16进制数据正确显示出来,新手实在没办法了

c#串口调试助手对接受到的数据进行格式转换问题

设计了一个CheckBox控件用来将接收到的数据进行字符串和十六进制互换,接收到的数据默认为字符串。 当勾选CheckBox时,将文本框中的数据转换成十六进制数显式,取消勾选再转换成字符串。 现在遇到的问题是我如果提前勾选CheckBox时,再发送数据,接收到的数据还是默认的字符串格式, 但是接收到数据之后,再取消CheckBox的勾选时,就会报错![](C:\Documents and Settings\zhaoyongkui\桌面),求指导,怎么设计才可以在发送之前选择十六进制接收也可以实现功能

C# 通过串口重复发送16进制数据有时候接收不正确的问题

C#编写的代码 串口信息 速率9600bits 数据8bit 停止1bit 校验无 软件发送 01 06 00 0c 00 00 49 c9(转换成byte[]发送) 串口调试工具接收到的数据正常时候为 01 06 00 0c 00 00 49 c9 但是会时不时的出现(前面4个不一样)00 00 63 20 00 00 49 c9 附图是连续发送50次接收到的数据 ![图片说明](https://img-ask.csdn.net/upload/201903/19/1552983178_232915.jpg) _______________________________________ 但是如果软件发送01 06 00 0c 00 01 88 09 串口调试工具接收的数据就没问题一直都是01 06 00 0c 00 01 88 09 如果把有问题的数据01 06 00 0c 00 00 49 c9最后一个c9,改成09,那也接收没问题 小弟完全搞不明白,请大神解惑.

只能读取传感器16进制的输出而无法读取ASCII; 16进制转ASCII码

使用串口调试助手读取传感器的数据时,发现遇到如下情况: 1 在接收设置里选择 Hex,则读出的数据为16进制数 2 若在接收设置里ASCII, 则读出的数据为乱码 3 使用16进制转ASCII工具,将从传感器读取的16进制数据转出的结果仍旧为乱码 谁能解释一下原因? 谢谢!

C#16进制转换2进制,0和1的与或操作

例如一个数据byte[] data={0F,00,00,00,00,00,00,00}里面都是16进制,例如数组中第一个元素,16进制0F对应的二进制00001111,现在要对其进行与或操作将第一个0变成1,为10001111,对应16进制为8F,再对其进行与或操作,最后的1成0,10001110,16进制为8E,请问,需要再对里面的二进制建立数组操作吗?有大神帮忙写个这个

为什么调用不了串口的接收函数呢 只能发送 不能接收? 本人菜鸟,求指点

public partial class Form1 : Form { //SerialPort sp1 = new SerialPort();//声明一个串口类 bool isOpen = false;//打开串口标志位 bool isSetProperty = false;//属性设置标志位 bool isHex = false;//十六进制显示标志位 public Form1() { //sp1.DataReceived += new SerialDataReceivedEventHandler(sp1_DataReceived); InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { this.MaximumSize = this.Size; this.MinimumSize = this.Size; this.MaximizeBox = false; for (int i = 1; i <= 10; i++) //假设最大支持到串口10 { cbxCOMPort.Items.Add("COM" + i); } cbxCOMPort.SelectedIndex = 0;//设当前指点选项的索引值为0 //列出常用波特率 cbxBaudRate.Items.Add("1200"); cbxBaudRate.Items.Add("2400"); cbxBaudRate.Items.Add("4800"); cbxBaudRate.Items.Add("9600"); cbxBaudRate.Items.Add("19200"); cbxBaudRate.Items.Add("38400"); cbxBaudRate.Items.Add("43000"); cbxBaudRate.Items.Add("56000"); cbxBaudRate.Items.Add("57600"); cbxBaudRate.Items.Add("115200"); cbxBaudRate.SelectedIndex = 3; //列出停止位 //cbxStopBits.Items.Add("0"); cbxStopBits.Items.Add("1"); cbxStopBits.Items.Add("1.5"); cbxStopBits.Items.Add("2"); cbxStopBits.SelectedIndex = 0; //列出奇偶校验位 cbxParity.Items.Add("无"); cbxParity.Items.Add("奇校验"); cbxParity.Items.Add("偶校验"); cbxParity.SelectedIndex = 0; //列出数据位 cbxDataBits.Items.Add("8"); cbxDataBits.Items.Add("7"); cbxDataBits.Items.Add("6"); cbxDataBits.Items.Add("5"); cbxDataBits.SelectedIndex = 0; //默认为char显示 rbnChar.Checked = true; } private void btnCheckCOM_Click(object sender, EventArgs e) { bool comExistence = false;//有可用串口标志位 cbxCOMPort.Items.Clear();//清楚当前串口号中的所有串口名称 for (int i = 1; i <= 10; i++) { try { //SerialPort sp= new SerialPort("COM" + i); //实例化端口 sp1 = new SerialPort("COM" + i); sp1.Open(); sp1.Close(); cbxCOMPort.Items.Add("COM" + i); comExistence = true; } catch { continue; } } if (comExistence) { cbxCOMPort.SelectedIndex = 0; //显示第一个添加的索引 } else { MessageBox.Show("没有找到可用串口!", "错误提示");//“错误提示”显示在标题栏,“没找到串口”为显示文本 } } //检查串口是否设置 private bool CheckPortSetting() { if (cbxCOMPort.Text.Trim() == "") return false; if (cbxBaudRate.Text.Trim() == "") return false; if (cbxDataBits.Text.Trim() == "") return false; if (cbxParity.Text.Trim() == "") return false; if (cbxDataBits.Text.Trim() == "") return false; else return true; } private bool CheckSendData() { if (tbxSendData.Text.Trim() == "") return false; else return true; } //设置串口的属性 private void SetPortProperty() { sp1.PortName = cbxCOMPort.Text.Trim(); //设置串口名 sp1.BaudRate = Convert.ToInt32(cbxBaudRate.Text.Trim());//设置串口的波特率 float f = Convert.ToSingle(cbxStopBits.Text.Trim());//将数字的制定字符串表示形式转换为等效的单精度浮点数 if (f == 0) { sp1.StopBits = StopBits.None; } else if (f == 1.5) { sp1.StopBits = StopBits.OnePointFive; } else if (f == 2) { sp1.StopBits = StopBits.Two; } else { sp1.StopBits = StopBits.One; } sp1.DataBits = Convert.ToInt16(cbxDataBits.Text.Trim());//设置数据位 string s = cbxParity.Text.Trim(); //设置奇偶校验位 if (s.CompareTo("无") == 0) //与字符串是否在同一位置,在前面,还是在后面 { sp1.Parity = Parity.None; } else if (s.CompareTo("奇校验") == 0) { sp1.Parity = Parity.Odd; } else if (s.CompareTo("偶校验") == 0) { sp1.Parity = Parity.Even; } else { sp1.Parity = Parity.None; } sp1.ReadTimeout = -1;//设置超时读取时间 sp1.RtsEnable = true;//该值指示在串行通信中是否启用请求发送(RTS)信号 //定义DataReceived事件,当串口收到数据后触发事件 } //定义DataReceived事件,当串口收到数据后触发事件 public void sp1_DataReceived(object sender, SerialDataReceivedEventArgs e) { sp1.DataReceived += new SerialDataReceivedEventHandler(sp1_DataReceived); //this.Invoke就是跨线程访问ui的方法 this.Invoke((EventHandler)(delegate { if (rbnHex.Checked) { isHex = true; } else { isHex = false; } if (isHex == false) { tbxRecvData.Text += sp1.ReadLine(); } else { Byte[] ReceiveData = new Byte[sp1.BytesToRead];//创建字节数组 sp1.Read(ReceiveData, 0, ReceiveData.Length); //读取所接收到的数据 string RecvDataText = null; for (int i = 0; i < ReceiveData.Length; i++) { RecvDataText += ("0x" + ReceiveData[i].ToString("X2") + " ");//X为十六进制 2为每次都是两位数 这样看着整齐 } tbxRecvData.Text += RecvDataText; } sp1.DiscardInBuffer();//丢弃接收缓冲区的数据 })); } private void btnSend_Click(object sender, EventArgs e) { //写串口数据 if (isOpen) { try { sp1.WriteLine(tbxSendData.Text); } catch { MessageBox.Show("发送数据时发生错误!", "错误提示"); return; } } else { MessageBox.Show("串口未打开!", "错误提示"); return; } //检测要发送的数据 if (!CheckSendData()) { MessageBox.Show("请输入要发送的数据!", "错误提示"); return; } } private void btnOpenCOM_Click(object sender, EventArgs e) { if (isOpen == false) { if (!CheckPortSetting()) { MessageBox.Show("串口未设置!", "错误提示"); return; } if (!isSetProperty)//串口未设置则设置串口 { SetPortProperty(); isSetProperty = true; } try//打开串口 { sp1.Open(); isOpen = true; btnOpenCOM.Text = "关闭串口"; //串口打开后则相关的串口设置按钮便不可再用 cbxCOMPort.Enabled = false; cbxBaudRate.Enabled = false; cbxDataBits.Enabled = false; cbxParity.Enabled = false; cbxStopBits.Enabled = false; rbnChar.Enabled = false; rbnHex.Enabled = false; } catch { //打开串口失败后,相应标志位取消 isSetProperty = false; isOpen = false; MessageBox.Show("串口无效或已被占用!", "错误提示"); } } else { try //打开串口 { sp1.Close(); isOpen = false; isSetProperty = false; btnOpenCOM.Text = "打开串口"; //关闭串口后,串口设置选项便可以继续使用 cbxCOMPort.Enabled = true; cbxBaudRate.Enabled = true; cbxDataBits.Enabled = true; cbxParity.Enabled = true; cbxStopBits.Enabled = true; rbnChar.Enabled = true; rbnHex.Enabled = true; } catch { MessageBox.Show("关闭串口时发生错误!", "错误提示"); } } } private void btnCleanData_Click(object sender, EventArgs e) { tbxRecvData.Text = ""; tbxSendData.Text = ""; tbxSendData.Focus(); } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { System.Environment.Exit(0); }

问个C#上位机数数据接收的问题

目前用C#编写了一个Winform上位机界面,其中用到SerialPort接收数据 具体流程如下: this.BeginInvoke(new EventHandler(delegate//调用控件的invoke方法,由主线程UI执行委托 //这里说一下:Begininvoke为"唤醒",异步执行EventHandler类的delegate委托 { int lenth = serialPort1.BytesToRead;//定义字节数组的长度:每接收一次接收数据读取的字符串长度 if (lenth != 0) { Byte[] BYTE = new Byte[lenth];//建立字节数组对象 serialPort1.Read(BYTE, 0, lenth);//读取接收的字节 builder.Clear();//接收数据时清除之前的残余字符串 foreach (byte str in BYTE) { builder.Append(str.ToString("X2")); } richReceiveText1.AppendText(builder.ToString().Replace(" ", "")); count += lenth; if (richReceiveText1.Text.Substring(0, 2) != "88") { richReceiveText1.Clear(); count = 0; } else { if (richReceiveText1.TextLength == 10) { list1.Add(richReceiveText1.Text); SetDSPReceive(); richReceiveText1.Clear(); } } receiveDataCount.Text = "接收数据:" + count.ToString() + "字节"; } else { ; } })); 这里我是先用richBox接收协议字符串,然后根据报头报位把协议存入到一个List<String>中,然后用SetDSPReceive()方法将list的内容通过协议规定先将字符串转换为十六进制然后再转换成十进制并给窗口的参数值进行赋值。 其中SetDSPReceive()为将接收的十六进制字节转换为界面上的参数的协议(比如 88 03 04 01 07 08,88 08是报头报尾巴,01决定了是什么参数,03,04,07决定了参数值是多少,数据一个100多条) 。 但问题来了:由于公司的控制器的数据发送间隔为10ms。而控制器发送数据时上位机winform会出现卡壳、数据不动的情况。之前用串口调试助手尝试了,单个发送一个协议没有问题,发完一个再手动单个发第二个也完全没有问题,间隔100ms以上连续发送数据也没出现卡壳,我想是不是因为发送的间隔比将接收的数据转换为需求的参数短了导致接收数据不全发生卡壳?? 还有一个问题:本应该接收到的字符串协议是88 03 04 01 07 08,但有时候接收到的协议是00 00 00 0D 88。。。。。,如何过滤掉表头之前的数据呢? 是不是:if (richBox1.Text.Substring(0, 2) != "88") { richBox1.Clear(); count = 0; } ?????????????????

VB串口编程--测量程序

我需要编写一个RS232串口测量程序 设备是一台工业用实时检测仪,用于检测微小形变、位移,测量精度为0.001mm,测量最大值为100mm。 数据帧格式: RTU模式 通信参数:波特率38400 数据帧:1个起始位,8个数据位,2个停止位。 测量仪通过四路集线器连接com1连接电脑,需要通过主机发送8个字节查询命令,集线器响应返回21个字节数据。 主机查询命令:80 03 00 00 00 08 5A 1D 集线器响应:80 03 10 xx xx xx xx yy yy yy yy zz zz zz zz ww ww ww ww NN NN 响应数据中,x、y、z、w部分为4个测量数据,我只需要第一个即x部分。每个测量数据为4个字节,第一个字节为符号位,代表正负号,第3、4字节为16进制测量数据。 测量数据转换为10进制后再除以1000即为实际测量数据。 以下我参考串口调试助手编写的代码,但是尝试多次还是达不到我的目的: 现在初始程序界面如下图,在完整版中,我希望实现: 界面只保留 数据1-4 这一块,16进制和字节长度,我并不需要。 程序功能,按下键盘 空格键,测量一次数据,返回10进制实际数据值,显示在text1中,第二次按下空格键,测量值显示在text2中,依次类推......每4次一个循环。 ![图片说明](https://img-ask.csdn.net/upload/201703/27/1490579882_21915.png) ``` Option Explicit Dim a As Integer Dim BytReceived() As Byte Const Str_Send As String = "8003000000085A1D" Dim strData As String Dim lenInput As Integer Private Sub cmdClear_Click() strData = "" RichTextBox1 = "" TxtSend = "" End Sub Private Sub Form_KeyPress(KeyAscii As Integer) '16进制发送 If KeyAscii = 32 Then Dim sj() As Byte Dim i As Integer If Len(Str_Send) Mod 2 = 0 And Len(Str_Send) <> 0 Then '检验16进制字符串长 ReDim sj(Len(Str_Send) / 2 - 1) For i = 0 To Len(Str_Send) - 1 Step 2 sj(i / 2) = Val("&H" & Mid(Str_Send, i + 1, 2)) Next If MSComm1.PortOpen = True Then MSComm1.Output = sj End If Else MsgBox ("格式不对!") End If End If End Sub '字符串表示的十六进制数据转化为相应的字节串,返回转化后的字节数 Private Sub Form_Load() MSComm1.Settings = "38400,n,8,2" MSComm1.InputMode = comInputModeBinary '采用二进制传输 MSComm1.InBufferCount = 0 '清空接受缓冲区 MSComm1.OutBufferCount = 0 '清空传输缓冲区 MSComm1.RThreshold = 1 '产生MSComm事件 MSComm1.InBufferSize = 1024 RichTextBox1.Text = "" Text2 = "" If MSComm1.PortOpen = False Then MSComm1.PortOpen = True End Sub Private Sub MSComm1_OnComm() '接收数据 Dim strBuff As String Select Case MSComm1.CommEvent Case 2 MSComm1.InputLen = 0 strBuff = MSComm1.Input BytReceived() = strBuff ReceiveData lenInput = Len(strData) Text2 = lenInput \ 2 '数据处理代码 End Select End Sub Public Function ReceiveData() '接收数据处理为16进制 Dim i As Integer For i = 0 To UBound(BytReceived) If Len(Hex(BytReceived(i))) = 1 Then strData = strData & "0" & Hex(BytReceived(i)) Else strData = strData & Hex(BytReceived(i)) End If Next RichTextBox1.Text = strData End Function ```

大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了

大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

程序员请照顾好自己,周末病魔差点一套带走我。

程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。

ArrayList源码分析(入门篇)

ArrayList源码分析 前言: 写这篇博客的主要原因是,在我上一次参加千牵科技Java实习生面试时,有被面试官问到ArrayList为什么查找的速度较快,插入和删除的速度较慢?当时我回答得不好,很大的一部分原因是因为我没有阅读过ArrayList源码,虽然最后收到Offer了,但我拒绝了,打算寒假学得再深入些再广泛些,下学期开学后再去投递其他更好的公司。为了更加深入理解ArrayList,也为

我以为我学懂了数据结构,直到看了这个导图才发现,我错了

数据结构与算法思维导图

String s = new String(" a ") 到底产生几个对象?

老生常谈的一个梗,到2020了还在争论,你们一天天的,哎哎哎,我不是针对你一个,我是说在座的各位都是人才! 上图红色的这3个箭头,对于通过new产生一个字符串(”宜春”)时,会先去常量池中查找是否已经有了”宜春”对象,如果没有则在常量池中创建一个此字符串对象,然后堆中再创建一个常量池中此”宜春”对象的拷贝对象。 也就是说准确答案是产生了一个或两个对象,如果常量池中原来没有 ”宜春” ,就是两个。...

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

讲一个程序员如何副业月赚三万的真实故事

loonggg读完需要3分钟速读仅需 1 分钟大家好,我是你们的校长。我之前讲过,这年头,只要肯动脑,肯行动,程序员凭借自己的技术,赚钱的方式还是有很多种的。仅仅靠在公司出卖自己的劳动时...

上班一个月,后悔当初着急入职的选择了

最近有个老铁,告诉我说,上班一个月,后悔当初着急入职现在公司了。他之前在美图做手机研发,今年美图那边今年也有一波组织优化调整,他是其中一个,在协商离职后,当时捉急找工作上班,因为有房贷供着,不能没有收入来源。所以匆忙选了一家公司,实际上是一个大型外包公司,主要派遣给其他手机厂商做外包项目。**当时承诺待遇还不错,所以就立马入职去上班了。但是后面入职后,发现薪酬待遇这块并不是HR所说那样,那个HR自...

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

玩转springboot启动banner定义所得

最近接手了一个springboot项目,不是不熟悉这个框架,启动时打印的信息吸引了我。 这不是我熟悉的常用springboot的打印信息啊,我打开自己的项目: 还真是的,不用默认的感觉也挺高大上的。一时兴起,就去研究了一下源代码,还正是有些收获,稍后我会总结一下。正常情况下做为一个老程序员,是不会对这种小儿科感兴趣的,不就是一个控制台打印嘛。哈哈! 于是出于最初的好奇,研究了项目的源代码。看到

带了6个月的徒弟当了面试官,而身为高级工程师的我天天修Bug......

即将毕业的应届毕业生一枚,现在只拿到了两家offer,但最近听到一些消息,其中一个offer,我这个组据说客户很少,很有可能整组被裁掉。 想问大家: 如果我刚入职这个组就被裁了怎么办呢? 大家都是什么时候知道自己要被裁了的? 面试软技能指导: BQ/Project/Resume 试听内容: 除了刷题,还有哪些技能是拿到offer不可或缺的要素 如何提升面试软实力:简历, 行为面试,沟通能...

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

男生更看重女生的身材脸蛋,还是思想?

往往,我们看不进去大段大段的逻辑。深刻的哲理,往往短而精悍,一阵见血。问:产品经理挺漂亮的,有点心动,但不知道合不合得来。男生更看重女生的身材脸蛋,还是...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试:第十六章:Java中级开发(16k)

HashMap底层实现原理,红黑树,B+树,B树的结构原理 Spring的AOP和IOC是什么?它们常见的使用场景有哪些?Spring事务,事务的属性,传播行为,数据库隔离级别 Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点 SpringCould组件有哪些,他们...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

终于懂了TCP和UDP协议区别

终于懂了TCP和UDP协议区别

你打算用Java 8一辈子都不打算升级到Java 14,真香

我们程序员应该抱着尝鲜、猎奇的心态,否则就容易固步自封,技术停滞不前。

无代码时代来临,程序员如何保住饭碗?

编程语言层出不穷,从最初的机器语言到如今2500种以上的高级语言,程序员们大呼“学到头秃”。程序员一边面临编程语言不断推陈出新,一边面临由于许多代码已存在,程序员编写新应用程序时存在重复“搬砖”的现象。 无代码/低代码编程应运而生。无代码/低代码是一种创建应用的方法,它可以让开发者使用最少的编码知识来快速开发应用程序。开发者通过图形界面中,可视化建模来组装和配置应用程序。这样一来,开发者直...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

《经典算法案例》01-08:如何使用质数设计扫雷(Minesweeper)游戏

我们都玩过Windows操作系统中的经典游戏扫雷(Minesweeper),如果把质数当作一颗雷,那么,表格中红色的数字哪些是雷(质数)?您能找出多少个呢?文中用列表的方式罗列了10000以内的自然数、质数(素数),6的倍数等,方便大家观察质数的分布规律及特性,以便对算法求解有指导意义。另外,判断质数是初学算法,理解算法重要性的一个非常好的案例。

《Oracle Java SE编程自学与面试指南》最佳学习路线图(2020最新版)

正确选择比瞎努力更重要!

Java岗开发3年,公司临时抽查算法,离职后这几题我记一辈子

前几天我们公司做了一件蠢事,非常非常愚蠢的事情。我原以为从学校出来之后,除了找工作有测试外,不会有任何与考试有关的事儿。 但是,天有不测风云,公司技术总监、人事总监两位大佬突然降临到我们事业线,叫上我老大,给我们组织了一场别开生面的“考试”。 那是一个风和日丽的下午,我翘着二郎腿,左手端着一杯卡布奇诺,右手抓着我的罗技鼠标,滚动着轮轴,穿梭在头条热点之间。 “淡黄的长裙~蓬松的头发...

面试官:你连SSO都不懂,就别来面试了

大厂竟然要考我SSO,卧槽。

终于,月薪过5万了!

来看几个问题想不想月薪超过5万?想不想进入公司架构组?想不想成为项目组的负责人?想不想成为spring的高手,超越99%的对手?那么本文内容是你必须要掌握的。本文主要详解bean的生命...

我说我懂多线程,面试官立马给我发了offer

不小心拿了几个offer,有点烦

爬虫(九十七)不爬妹子图的爬虫不是一只好爬虫

不爬妹子图的爬虫不是一只好爬虫。----鲁迅还是一样,我们在爬取妹子图片的时候,首先要分析一下 DOM这里的img是就封面,如果只抓取封面的话,到这就可以了,但是我们取的是所有图片,所...

立即提问
相关内容推荐