用vsprintf 實現LCD格式化輸出

2021-07-08 11:25:01 字數 1043 閱讀 6263

vsprintf 函式定義如下:

int vsprintf(char *string, char *format, va_list param);

vsprintf 是sprintf 的乙個變形,它只有三個引數。vsprintf 用於執行有不定數量引數的函式,類似printf 格式。vsprintf的前兩個引數與sprintf相同:乙個用於儲存結果的字串緩衝區和乙個格式化字串。第三個引數是指向格式化引數佇列的指標。實際上,該指標指向在堆疊中供函式呼叫的變數。va_list、va_start和va_end巨集(在stdarg.h中定義)幫助我們處理堆疊指標。本章最後的scrnsize程式展示了使用這些巨集的方法。使用vsprintf 函式,sprintf 函式可以這樣編寫:

int sprintf (char * szbuffer, const char * szformat, ...)

va_start巨集將parg設定為指向乙個堆疊變數,該變數位址在堆疊引數szformat的上面。

由於許多windows早期程式使用了sprintf 和vsprintf,最終導致microsoft 向windows api中增添了兩個相似的函式。windows的wsprintf 和wvsprintf 函式在功能上與sprintf 和vsprintf 相同,但它們不能處理浮點格式。

當然,隨著寬字元的發表,sprintf 型別的函式增加了許多,使得函式名稱變得極為混亂。下面列出了microsoft 的c執行時期函式庫和windows支援的所有sprintf 函式。

應用如下:

#include

void wordshow(u16 x, u16 y,u8 * data, ...)

{u8 buff[50];

va_list ap;

va_start(ap, data);

vsprintf(buff,data,ap);

lcd_str_o( x, y,buff,red,white);

呼叫:wordshow(240,66,"vrl:%6.3f   vc:%6.3f   vh:%6.3f",senser_vrl,senser_vc,senser_vh);

用原始碼實現QML顯示LCD數字

在上一遍文章介紹載入字型庫來實現lcd顯示數字,本篇介紹使用原始碼來實現,動手自己寫原始碼。在ui下qlcdnumber控制項實現了lcd數字顯示,該控制項的原始碼,實現自己的lcd數字顯示。首先定義乙個類,例如 lcdnumberitem 繼承qquickpainteditem類。h檔案如下所示 ...

PHP ImageLoadFont用檔案格式轉換

根據imageloadfont官方說明需要使用到gdf檔案格式,依賴它的imagefontwidth和imagefontheight函式同樣需要。gdf檔案很難找,我收集了2種解決方案。windows平台下ttf轉gdf工具wftopf.exe 0積分 無毒 可在win10下執行 使用簡介如下 軟體...

用canvas實現繪製座標單元格

座標單元格在確定位置的時候很有作用,下面附上繪製座標單元格的 當然以下的引數都是可以自定義的 1 doctype html 2 html lang en 3 head 4 meta charset utf 8 5 title 繪製座標網格 title 6 style 7canvas 10style ...