最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言利用sprintf固定字符串輸出位數(shù)

 更新時(shí)間:2023年03月16日 14:42:39   作者:DS小龍哥  
sprintf?函數(shù)是一個(gè)?C?語言中的函數(shù),也被許多其他編程語言所支持。這篇文章主要介紹了C語言如何利用sprintf固定字符串輸出位數(shù),需要的可以參考一下

一、前言

sprintf 函數(shù)是一個(gè) C 語言中的函數(shù),也被許多其他編程語言所支持。它允許你根據(jù)一組變量來格式化和存儲(chǔ)一個(gè)字符字符串。sprintf 函數(shù)可以用于將格式化的數(shù)據(jù)寫入字符數(shù)組或字符串中,然后根據(jù)需要打印或存儲(chǔ)該字符串。sprintf 函數(shù)的第一個(gè)參數(shù)是格式化數(shù)據(jù)將被寫入的字符數(shù)組或字符串,隨后的參數(shù)是用于生成格式化輸出的變量。sprintf 函數(shù)允許你控制輸出的格式,包括小數(shù)點(diǎn)后的位數(shù)、字段的寬度和文本的對(duì)齊方式等。

在單片機(jī)項(xiàng)目開發(fā)中經(jīng)常需要通過sprintf組合字符串,完成各種數(shù)據(jù)的打印,顯示等等。

比如:

在單片機(jī)里通過LCD屏顯示傳感器數(shù)據(jù)的時(shí)候,如果不固定字符串長(zhǎng)度,每次從傳感器讀取的數(shù)據(jù)長(zhǎng)度可能都不一樣,一般都會(huì)先清屏再顯示,或者先使用空格清除顯示,再顯示實(shí)際數(shù)據(jù)。這種在LCD刷新頻率比較低的情況下肉眼會(huì)看出屏幕閃爍的效果。 為了方便顯示,我們可以使用sprintf固定最終數(shù)據(jù)的長(zhǎng)度,預(yù)置好傳感器最大輸出的長(zhǎng)度進(jìn)行顯示,后期采集的數(shù)據(jù)如果不夠長(zhǎng)度,就以空格補(bǔ)齊。這樣調(diào)用顯示函數(shù)就很方便了,不需要擔(dān)心清屏問題。

二、案例

【1】多個(gè)整數(shù)輸出補(bǔ)齊

我們讀取到DS18B20溫度,需要顯示在LCD顯示屏上。我們將得到的溫度固定長(zhǎng)度為5個(gè)字符的字符串,顯示到LCD屏上。

char DS18B20_str[10];
DS18B20=readDs18b20();
sprintf(DS18B20_str, "%02d.%01d", DS18B20 >> 4, DS18B20 & 0xF);

這里,我們使用了%02d和%01d格式化字符串來指定輸出數(shù)字的位數(shù)。%02d表示要輸出兩位數(shù)字,并在前面補(bǔ)零(如果需要),而%01d表示要輸出一位數(shù)字。因此,上面的代碼將會(huì)打印出一個(gè)形如"12.3 "(注意最后的空格)的字符串,其中數(shù)字部分總共有5個(gè)字符(包括小數(shù)點(diǎn))。

【2】單個(gè)整數(shù)輸出補(bǔ)齊

char mqtt_message[10];
water_hp=read_water_hp();
sprintf(mqtt_message, "%3d", water_hp);

這將把 water_hp 轉(zhuǎn)換為一個(gè) 3 位寬的字符串,并根據(jù)需要在左邊用空格填充。如果 water_hp 不足 3 位,它將被左側(cè)填充空格以達(dá)到 3 位的寬度。

【3】固定時(shí)間長(zhǎng)度

下面是一個(gè)將秒轉(zhuǎn)為時(shí)分秒輸出的C語言函數(shù):

#include <stdio.h>
#include <string.h>
 ?
char* formatTime(int seconds) {
    static char timeStr[9]; // 時(shí)分秒格式化后最多占用8個(gè)字符,再加上'\0'結(jié)束符
    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("%s\n", timeStr);
    return 0;
}

這個(gè)程序中,formatTime 是我們創(chuàng)建的子函數(shù),它接受一個(gè)整型參數(shù) seconds,代表需要轉(zhuǎn)換的總秒數(shù)。該函數(shù)計(jì)算出對(duì)應(yīng)的小時(shí)、分鐘和秒數(shù),并使用 snprintf 函數(shù)將格式化后的時(shí)間字符串寫入到 timeStr 數(shù)組中。

main 函數(shù)中,我們可以調(diào)用 formatTime 函數(shù)來進(jìn)行測(cè)試,并將得到的字符串輸出。注意,我們需要使用 %s 格式化字符串輸出,并且需要使用 static 關(guān)鍵字聲明 timeStr 數(shù)組,以便在函數(shù)返回后仍然可以訪問。

【4】浮點(diǎn)數(shù)補(bǔ)齊

固定浮點(diǎn)數(shù)輸出的長(zhǎng)度。

double x = 123.456789;
printf("溫度:%8.2f", x);

這段代碼的作用是將變量 x 的值輸出到屏幕上,同時(shí)格式化輸出為一個(gè)浮點(diǎn)數(shù)(保留兩位小數(shù),并且右對(duì)齊,總寬度為8),前面加上“溫度:”字樣。

具體來說:

  • %8.2f 是格式化字符串,其中 %f 表示要輸出的是一個(gè)浮點(diǎn)數(shù),.2 表示要保留兩位小數(shù),而 8 則表示總寬度為8(不足部分右對(duì)齊,左邊補(bǔ)空格)。
  • printf 函數(shù)中,我們使用 % 符號(hào)來引用這個(gè)格式化字符串,并將 x 作為參數(shù)傳遞進(jìn)去。

【5】onenet數(shù)據(jù)組合

OneNet是由中國(guó)移動(dòng)打造的物聯(lián)網(wǎng)云平臺(tái),它提供了一個(gè)完整的物聯(lián)網(wǎng)解決方案,包括設(shè)備接入、數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)分析和應(yīng)用開發(fā)等功能。OneNet為用戶提供了一系列的API,使得開發(fā)者能夠輕松地將自己的設(shè)備連接到云端,并通過云端進(jìn)行實(shí)時(shí)監(jiān)測(cè)和控制。同時(shí),OneNet還提供了強(qiáng)大的數(shù)據(jù)分析工具,幫助用戶更好地理解和利用設(shè)備產(chǎn)生的海量數(shù)據(jù)。作為全球領(lǐng)先的物聯(lián)網(wǎng)云平臺(tái)之一,OneNet已經(jīng)被廣泛應(yīng)用于智能家居、智慧城市、工業(yè)物聯(lián)網(wǎng)等領(lǐng)域。

OneNet支持多種協(xié)議接入,其中局包括了HTTP協(xié)議,單片機(jī)可以利用HTTP配合WIFI或者GPRS模塊向OneNet上傳報(bào)文,而組合HTTP報(bào)文的時(shí)候,就需要填數(shù)據(jù)內(nèi)容的長(zhǎng)度,由于是采集傳感器的數(shù)據(jù)組合報(bào)文上傳,每次采集的傳感器數(shù)據(jù)長(zhǎng)度肯定會(huì)不一樣,為了不再重復(fù)計(jì)算整個(gè)報(bào)文的字符串長(zhǎng)度,我們可以利用sprintf固定數(shù)據(jù)的長(zhǎng)度,這樣每次組合的報(bào)文數(shù)據(jù)長(zhǎng)度就是一致的,省去了單獨(dú)計(jì)算長(zhǎng)度的過程。

char OneNet_HTTP_CMD[1024];
#define ONENET_DEVICE_ID "1025640558"
#define ONENET_API_KEY "gOp2NkgQEt3=EQY7ei61suGjgIg="
 
/*
函數(shù)功能: 采用HTTP協(xié)議方式向OneNet服務(wù)器上報(bào)GPS經(jīng)緯度信息
函數(shù)參數(shù):
                char *data_point:數(shù)據(jù)點(diǎn)的名稱
                double Longitude,double latitude:上傳的經(jīng)緯度數(shù)據(jù)
*/
void OneNet_HTTP_GPS_DataUpdate(double Longitude, double latitude)
{
    //拼接數(shù)據(jù)
    snprintf(OneNet_HTTP_CMD, sizeof(OneNet_HTTP_CMD),
        "POST /devices/%s/datapoints HTTP/1.1\r\n" \
        "api-key:%s\r\n" \
        "Host:api.heclouds.com\r\n" \
        "Connection:close\r\n" \
        "Content-Length:160\r\n" \
        "\r\n" \
        "{"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=%s\r\n", OneNet_HTTP_CMD);
 
    printf("%s\r\n", OneNet_HTTP_CMD);
}
?

int main()
{
    OneNet_HTTP_GPS_DataUpdate(Longitude,latitude);
    return 0;
}

到此這篇關(guān)于C語言利用sprintf固定字符串輸出位數(shù)的文章就介紹到這了,更多相關(guān)C語言sprintf內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言數(shù)據(jù)(整數(shù)、浮點(diǎn)數(shù))在內(nèi)存中的存儲(chǔ)

    C語言數(shù)據(jù)(整數(shù)、浮點(diǎn)數(shù))在內(nèi)存中的存儲(chǔ)

    之前對(duì)c語言數(shù)據(jù)存儲(chǔ)一直不太明白,最近仔細(xì)研究了一番,所以下面這篇文章主要給大家介紹了關(guān)于C語言數(shù)據(jù)(整數(shù)、浮點(diǎn)數(shù))在內(nèi)存中存儲(chǔ)的相關(guān)資料,需要的朋友可以參考下
    2021-06-06
  • C語言修煉之路函數(shù)篇真題訓(xùn)練下

    C語言修煉之路函數(shù)篇真題訓(xùn)練下

    函數(shù)是一組一起執(zhí)行一個(gè)任務(wù)的語句。每個(gè) C 程序都至少有一個(gè)函數(shù),即主函數(shù) main() ,所有簡(jiǎn)單的程序都可以定義其他額外的函數(shù)
    2022-03-03
  • 深入理解Qt 初始項(xiàng)目代碼

    深入理解Qt 初始項(xiàng)目代碼

    本文解析了Qt項(xiàng)目創(chuàng)建后的主要文件,包括main.cpp、mywidget.h、mywidget.cpp、mywidget.ui和.pro,main.cpp這五個(gè)文件,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-02-02
  • Unity3D實(shí)現(xiàn)經(jīng)典小游戲Pacman

    Unity3D實(shí)現(xiàn)經(jīng)典小游戲Pacman

    這篇文章主要介紹了基于Unity3D制作一做個(gè)經(jīng)典小游戲Pacman,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Unity3D有一定的幫助,感興趣的小伙伴可以了解一下
    2021-12-12
  • linux之sort命令的用法

    linux之sort命令的用法

    sort將文件的每一行作為一個(gè)單位,相互比較,比較原則是從首字符向后,依次按ASCII碼值進(jìn)行比較,最后將他們按升序輸出
    2013-10-10
  • Qt?QtCreator添加自定義注釋的實(shí)現(xiàn)方法

    Qt?QtCreator添加自定義注釋的實(shí)現(xiàn)方法

    在寫代碼的時(shí)候我們?yōu)榱艘?guī)范化,一般會(huì)加文件注釋、類注釋和函數(shù)注釋,本文主要介紹了Qt?QtCreator添加自定義注釋的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-11-11
  • C++ 再識(shí)類和對(duì)象

    C++ 再識(shí)類和對(duì)象

    類是創(chuàng)建對(duì)象的模板,一個(gè)類可以創(chuàng)建多個(gè)對(duì)象,每個(gè)對(duì)象都是類類型的一個(gè)變量;創(chuàng)建對(duì)象的過程也叫類的實(shí)例化。每個(gè)對(duì)象都是類的一個(gè)具體實(shí)例(Instance),擁有類的成員變量和成員函數(shù)
    2021-10-10
  • C++?Qt開發(fā)之使用QUdpSocket實(shí)現(xiàn)UDP網(wǎng)絡(luò)通信

    C++?Qt開發(fā)之使用QUdpSocket實(shí)現(xiàn)UDP網(wǎng)絡(luò)通信

    Qt 是一個(gè)跨平臺(tái)C++圖形界面開發(fā)庫(kù),利用Qt可以快速開發(fā)跨平臺(tái)窗體應(yīng)用程序,本文主要介紹如何運(yùn)用QUdpSocket組件實(shí)現(xiàn)基于UDP的網(wǎng)絡(luò)通信功能,需要的可以參考下
    2024-03-03
  • 淺析C語言中typeof關(guān)鍵字用法

    淺析C語言中typeof關(guān)鍵字用法

    typeof關(guān)鍵字是C語言中的一個(gè)新擴(kuò)展。在linux內(nèi)核源代碼中廣泛使用。接下來通過本文給大家分享C語言中typeof關(guān)鍵字用法,需要的朋友參考下
    2017-02-02
  • GCC 編譯使用動(dòng)態(tài)鏈接庫(kù)和靜態(tài)鏈接庫(kù)的方法

    GCC 編譯使用動(dòng)態(tài)鏈接庫(kù)和靜態(tài)鏈接庫(kù)的方法

    根據(jù)鏈接時(shí)期的不同,庫(kù)又有靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)之分,有別于靜態(tài)庫(kù),動(dòng)態(tài)庫(kù)的鏈接是在程序執(zhí)行的時(shí)候被鏈接的
    2013-03-03

最新評(píng)論

青州市| 巴林右旗| 孝义市| 股票| 郑州市| 辽宁省| 西峡县| 基隆市| 鲁山县| 临沧市| 重庆市| 阜城县| 体育| 昌平区| 邢台市| 拉萨市| 云阳县| 小金县| 舒城县| 新竹市| 阳城县| 遵义市| 延寿县| 弋阳县| 北京市| 东明县| 天水市| 营口市| 五华县| 白沙| 天台县| 麻江县| 岢岚县| 莲花县| 沙洋县| 盐津县| 金秀| 平遥县| 藁城市| 和平县| 襄汾县|