<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
sprintf
函數是一個 C 語言中的函數,也被許多其他程式語言所支援。它允許你根據一組變數來格式化和儲存一個字元字串。sprintf
函數可以用於將格式化的資料寫入字元陣列或字串中,然後根據需要列印或儲存該字串。sprintf
函數的第一個引數是格式化資料將被寫入的字元陣列或字串,隨後的引數是用於生成格式化輸出的變數。sprintf
函數允許你控制輸出的格式,包括小數點後的位數、欄位的寬度和文字的對齊方式等。
在微控制器專案開發中經常需要通過sprintf組合字串,完成各種資料的列印,顯示等等。
比如:
在微控制器裡通過LCD屏顯示感測器資料的時候,如果不固定字串長度,每次從感測器讀取的資料長度可能都不一樣,一般都會先清屏再顯示,或者先使用空格清除顯示,再顯示實際資料。這種在LCD重新整理頻率比較低的情況下肉眼會看出螢幕閃爍的效果。 為了方便顯示,我們可以使用sprintf固定最終資料的長度,預置好感測器最大輸出的長度進行顯示,後期採集的資料如果不夠長度,就以空格補齊。這樣呼叫顯示函數就很方便了,不需要擔心清屏問題。
我們讀取到DS18B20溫度,需要顯示在LCD顯示屏上。我們將得到的溫度固定長度為5個字元的字串,顯示到LCD屏上。
char DS18B20_str[10]; DS18B20=readDs18b20(); sprintf(DS18B20_str, "%02d.%01d", DS18B20 >> 4, DS18B20 & 0xF);
這裡,我們使用了%02d和%01d格式化字串來指定輸出數位的位數。%02d表示要輸出兩位數位,並在前面補零(如果需要),而%01d表示要輸出一位數位。因此,上面的程式碼將會列印出一個形如"12.3 "(注意最後的空格)的字串,其中數位部分總共有5個字元(包括小數點)。
char mqtt_message[10]; water_hp=read_water_hp(); sprintf(mqtt_message, "%3d", water_hp);
這將把 water_hp
轉換為一個 3 位寬的字串,並根據需要在左邊用空格填充。如果 water_hp
不足 3 位,它將被左側填充空格以達到 3 位的寬度。
下面是一個將秒轉為時分秒輸出的C語言函數:
#include <stdio.h> #include <string.h> char* formatTime(int seconds) { static char timeStr[9]; // 時分秒格式化後最多佔用8個字元,再加上' '結束符 int hours, minutes; hours = seconds / 3600; seconds = seconds % 3600; minutes = seconds / 60; seconds = seconds % 60; snprintf(timeStr, sizeof(timeStr), "%02d:%02d:%02d", hours, minutes, seconds); return timeStr; } int main() { int seconds = 3661; // Example value char* timeStr = formatTime(seconds); printf("%sn", timeStr); return 0; }
這個程式中,formatTime
是我們建立的子函數,它接受一個整型引數 seconds
,代表需要轉換的總秒數。該函數計算出對應的小時、分鐘和秒數,並使用 snprintf
函數將格式化後的時間字串寫入到 timeStr
陣列中。
在 main
函數中,我們可以呼叫 formatTime
函數來進行測試,並將得到的字串輸出。注意,我們需要使用 %s
格式化字串輸出,並且需要使用 static
關鍵字宣告 timeStr
陣列,以便在函數返回後仍然可以存取。
固定浮點數輸出的長度。
double x = 123.456789; printf("溫度:%8.2f", x);
這段程式碼的作用是將變數 x
的值輸出到螢幕上,同時格式化輸出為一個浮點數(保留兩位小數,並且右對齊,總寬度為8),前面加上“溫度:”字樣。
具體來說:
%8.2f
是格式化字串,其中 %f
表示要輸出的是一個浮點數,.2
表示要保留兩位小數,而 8
則表示總寬度為8(不足部分右對齊,左邊補空格)。printf
函數中,我們使用 %
符號來參照這個格式化字串,並將 x
作為引數傳遞進去。OneNet是由中國移動打造的物聯網雲平臺,它提供了一個完整的物聯網解決方案,包括裝置接入、資料儲存、資料分析和應用開發等功能。OneNet為使用者提供了一系列的API,使得開發者能夠輕鬆地將自己的裝置連線到雲端,並通過雲端進行實時監測和控制。同時,OneNet還提供了強大的資料分析工具,幫助使用者更好地理解和利用裝置產生的海量資料。作為全球領先的物聯網雲平臺之一,OneNet已經被廣泛應用於智慧家居、智慧城市、工業物聯網等領域。
OneNet支援多種協定接入,其中局包括了HTTP協定,微控制器可以利用HTTP配合WIFI或者GPRS模組向OneNet上傳報文,而組合HTTP報文的時候,就需要填資料內容的長度,由於是採集感測器的資料組合報文上傳,每次採集的感測器資料長度肯定會不一樣,為了不再重複計算整個報文的字串長度,我們可以利用sprintf固定資料的長度,這樣每次組合的報文資料長度就是一致的,省去了單獨計算長度的過程。
char OneNet_HTTP_CMD[1024]; #define ONENET_DEVICE_ID "1025640558" #define ONENET_API_KEY "gOp2NkgQEt3=EQY7ei61suGjgIg=" /* 函數功能: 採用HTTP協定方式向OneNet伺服器上報GPS經緯度資訊 函數引數: char *data_point:資料點的名稱 double Longitude,double latitude:上傳的經緯度資料 */ void OneNet_HTTP_GPS_DataUpdate(double Longitude, double latitude) { //拼接資料 snprintf(OneNet_HTTP_CMD, sizeof(OneNet_HTTP_CMD), "POST /devices/%s/datapoints HTTP/1.1rn" "api-key:%srn" "Host:api.heclouds.comrn" "Connection:closern" "Content-Length:160rn" "rn" "{"datastreams":[{"id":"gps","datapoints":[{"value":{"lon":%8.6f,"lat":%8.6f}}]},{"id":"gps2","datapoints":[{"value":{"lon":%10.6f,"lat":%10.6f}}]}]}", ONENET_DEVICE_ID, ONENET_API_KEY, Longitude, latitude, Longitude, latitude); printf("GPS_OneNet_HTTP_CMD=%srn", OneNet_HTTP_CMD); printf("%srn", OneNet_HTTP_CMD); } int main() { OneNet_HTTP_GPS_DataUpdate(Longitude,latitude); return 0; }
到此這篇關於C語言利用sprintf固定字串輸出位數的文章就介紹到這了,更多相關C語言sprintf內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45