arduino中print()跟write()最大区别和注意事项 (最详细)
本文重点解释write跟print最大区别
因为书本和网文没有对print和write核心区别解释得很清晰, 有些人不是很理解,我写的内容会对一些初学者给予帮助!更加好去使用这两个函数
print输出结论:
print输出的是----字符
逐个字符转成对应ASCII码的10进制数,发送出去.如包含多个字符,均按每一个自身独立ASCII码按顺序发送出去..
假设发送 ' '形式的字符, 'a'中的a字符将会根据ASCII码编码转成10进制97,然后将对应二进制1100001发送出去,如接收方显示是16进制数将会是61. 必须谨记, 不论数据表现方法是什么进制,他都是会转成10进制 再将此数据进行每个字符的ASCII码转换处理
例:
int a = 9734;
输出:
Serial.print(a);
Serial.print('a');
char c[4]="abcd";
--------------------------
变量a输出结果是39 37 33 34
'a'输出结果是61
char c 输出结果是61 62 63 64
值得注意的是, 数值请不要大于数据类型,否则溢出后,输出的数值将会异常.
例:
int a = 973411; //溢出
输出结果是2D 39 36 32 39
--------进制形式输出的方式
根据进制转换后的字符,逐个字符转换成ascii码,以16进制形式逐个输出
int a = 9734;
Serial.print(a,BIN);//2进制是10011000000110 以ASCII编码输出16进制 31 30 30 31 31 30 30 30 30 30 30 31 31 30
Serial.print(a,OCT);//8进制是23006.按照ASCII编码输出16进制32 33 30 30 36
Serial.print(a,DEC);//10进制是9734,按照ASCII编码输出16进制39 37 33 34
Serial.print(a,HEX);//10进制是2606,按照ASCII编码输出16进制32 36 30 36
write输出结论:
write 输出的是----字节
"满8位,高位溢出".不论数值是多少只保留最低8位的2进制数据. 然后转换成16进制输出.
例:
int a=973411;
int b=2436;
int c = 60;
char d ='a';
输出:
Serial.write(a);
Serial.write(b);
Serial.write(c);
Serial.write(d);
输出结果16进制: a = 63 b = 84 c = 3C d= 61
为什么输出是这样?
10进制973411的16进制是eda63 对应二进制1110 1101 1010 0110 0011,低8位0110 0011
10进制2436的16进制是984 对应二进制1001 1000 0100,低8位1000 0100
10进制60的16进制是3C 对应二进制 11 1100 (8位以下全部输出)
'a'的16进制是61 对应二进制 110 0001 (8位以下全部输出)
( ' ' 内容代表字符,程序会先将该字符a转成10进制97,也就是二进制110 0001)
write过程,把数据转为2进制,保留最低8位的2进制数据.输出到串口.
然后根据接收方是16进制还是ASCII去转换,作出显示/接收 .
如果以HEX显示: 串口收到是 63 84 3C 61
如果以ascii显示: 串口收到是 c \x84 < a
注意的是ascii显示,等于多了一重步骤,接收方转成ascii码对应的字符显示出来.
其中因为16进制84在ascii码中是不存在的,所以接收方会显示乱码或者直接显示16进制数0x84
write使用比较常见场合:
传输数据,UTF8转GB码, 遥控器编码发送等等..
例如转GB码
UTF8 假如"我"字16进制编码是 E6 88 91 GB2312码是CE D2
其中UTF8转GB码,可以对编码用数组保存16进制数,然后用serial.write(buf,len)语法, 把相应的CE D2发送到中文屏幕,就会显示"我"字
arduino中print()跟write()最大区别和注意事项 (最详细)相关推荐
- C++中print和printf的区别
print与printf的区别 1,print 中不能使用%s ,%d 或%c: 2,print 自动换行,printf 没有自动换行. 转载于:https://www.cnblogs.com/yun ...
- Python 中print 和return 的区别
1.print() print()函数的作用是输出数据到控制台,就是打印在你能看到的界面上. 2.return return语句[表达式]退出函数,选择性地向调用方返回一个表达式.不带参数值的retu ...
- Java中print()\println()\printf()的区别及用法
print()\println()\printf()的区别: print将它的参数显示在命令窗口,并将输出光标定位在所显示的最后一个字符之后. println 将它的参数显示在命令窗口,并在结尾加上换 ...
- java中print()和println()的区别
print()和println()的区别在于print会在同一行输出 [不换行] : 而println()每次输出,下一次输出都会换一行,即在下一行输出 [也就是换行].
- php class中public,private,protected的区别以及实例分析
本篇文章是对php class中public,private,protected的区别以及实例进行了详细的分析介绍,需要的朋友参考下 一,public,private,protected的区别 pub ...
- Linux中EXT3与EXT4的区别!
在Linux系统中,日志文件系统分为很多种类型,其中比较典型的是:ext3.ext4.xfs等,那么Linux中EXT3与EXT4的区别有哪些?以下是详细的内容介绍. Linux Kernel自2.6 ...
- Mybatis映射文件SQL语句模糊查询,#和$的区别和注意事项
Mybatis映射文件SQL语句模糊查询 1. "%"#{value}"%" 在参数中不需要添加 %_ 推荐使用 2. '%${value}%' 在参数中不需要 ...
- Arduino中Serial.print()与Serial.write()函数的区别,以及串口通信中十六进制与字符串的收发格式问题和转换过程详解
1.串口通信中十六进制和字符数据的区别 串口收发数据时字符.十六进制.二进制格式详细区分 ASCII码查询表格 在使用串口发送数据时可以选择字符串(ASCII)发送或者十六进制(Hex)发送,通常情况 ...
- go语言中fmt包中Print、Printf、Println输出相关函数的区别
go语言中fmt包中Print.Printf.Println输出相关函数的区别 区别: Print系列函数将内容输出到系统的标准输出.其区别:Print函数式直接输出内容,Printf函数支持格式化输 ...
- Java中print、printf、println的区别 详解
Java中print.printf.println的区别详解 printf主要是继承了C语言的printf的一些特性,可以进行格式化输出 print就是一般的标准输出,但是不换行 println和pr ...
最新文章
- c语言关键字_C语言初学者必须掌握的关键字!
- 011_Vue自定义指令
- 【UGV】Mec 麦轮版小车驱动程序示例
- 服务器e5系列和e5v4系列,“芯”力量:四款至强E5 v4双路服务器横评
- 启动oracle00119,oracle启动报ORA-00119错误
- 持续更新的Zookeeper知识总结
- js符号转码_JS 字符串编码函数(解决URL特殊字符传递问题):escape()、encodeURI()、encodeURIComponent()区别详解...
- 华侨大学计算机学院2019,华侨大学计算机科学与技术学院2019年非全日制研究生复试成绩(第四批)...
- 华为 HR 内网 5000 字实名控诉:研发兄弟一个月加班 160 小时却被说不努力...
- C#把汉字转换成16进制(HEX)并向串口发送数据
- Citrix XenApp/XenDesktop 7.15 LTSR发布
- Python数据挖掘工具总结
- html验证码自动刷新,验证码输入错误后自动刷新验证码
- 手写RPC(五) 核心模块网络协议模块编写 ---- 自定义协议
- 传统蓝牙base on pincode配对以及安全简单配对(Secure Simple Pairing)流程介绍
- python读取oracle数据库中文乱码_PL/SQL连接Oracle数据库,中文乱码,显示问号
- 如何手动下载并安装 Visual Studio Code 的 SAP Fiori tools - Extension Pack 扩展
- iOS-Undefined symbols for architecture x86_64-- 调适萤石摄像头驱动程序--萤石开放平台
- 他借无人机代人工巡检光伏场 热成像解析45万光伏板优劣
- vue3+Ts使用pinia(vue-lic搭建项目)