极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 25607|回复: 8

串口Serial.print() 和Serial.write()的区别

[复制链接]
发表于 2017-3-7 21:49:23 | 显示全部楼层 |阅读模式
print 和write的区别,其实不难理解, 我自己也写了一个小程序来测试(结果如图1所示).
1, Serial.print(78) --> 结果得到的是: 78
2, Serial.write(78) --> 结果得到的是78对应的ascii码值:N


但是,问题来了, 从各种回答帖子还有官网上,我得到了一个非常矛盾的解释:"Prints data to the serial port as human-readable ASCII text. "(如图二所示). 这句解释让我非常困惑....Serial.print(78) 明明显示了 78 这个数值,并非 ascii码值 N. 那为什么官方解释还有所有回答贴上,都注明了"在输出数值时,write会直接输出数据本身,而print会将其转化为可显示的ASCII字符"呢?
会不会是我对于这些回答/官方解释,的字面意思,理解错了? 请求各位大牛解答~ 先谢谢了.

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2017-3-8 12:04:54 | 显示全部楼层
write()所有内容以byte形式打印
Writes binary data to the serial port. This data is sent as a byte or series of bytes

print()会分辨数字跟文字
This command can take many forms
回复 支持 反对

使用道具 举报

发表于 2017-3-8 18:04:50 | 显示全部楼层
你的兩個 "78", 意義上有很大的分別.

第一個 "78", 是一個字串的 "78", 這就是 human-readable 既 "78", 它背後佔用 2 個 byte, 分別是 0x37 及 0x38.
而第二個 78 (顯示為 "N"), 它只佔用 1個 byte,  數值是 10進 的 78, 亦即是 0x4e.

所謂 human-readable, 就是人類可以直接讀取的吧.  這裡假設了人類是以十進看數字, 所以用了 10進制把 78 顯示出來了.  但人類看的有時會比較混亂, 你可以試試:

  Serial.print(78);
  Serial.print("78");

看看兩者有什麼分別?  在電腦中, 78 跟 "78" 是完全不同的, 但用 human-readable 的表現時, 就變成一樣了.  所以, print 的結果, 主要用於"給人看"的地方.  電腦內部通訊, 如果不需要用人眼再檢查, 用 write 會比較好, 直接快捷.

其實 print 也不一定要顯示為 "78" 的, 你可以選用 HEX 去輸出, 就會是 "4E".  
回复 支持 反对

使用道具 举报

发表于 2017-3-9 18:33:52 | 显示全部楼层
感觉现在写程序的渐渐对资料结构不是很注重了。你的问题其实参杂了三个格式:int, byte, char
print就是特别用于输出到监视窗口,会把数字转成可读型式,预设十进位
int(78) -> char('7')+char('8') -> 窗口 -> char('7' '8')
write只会输出最原始的资料,也就是byte型式
int(78) -> byte(0x4E) -> 窗口 -> char(78)=char('N')
回复 支持 反对

使用道具 举报

发表于 2017-3-11 13:24:12 | 显示全部楼层
print属于格式化输出,如果不加条件,输出的都是字符型。
print有点类似于把write又封装了一下,可以控制输出格式以及字符串的输出。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-25 13:00 , Processed in 0.053154 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表