int sprintf(char *string, char *format [,argument,...]);
51內核單片機+KEIL51編譯器
在使用AT命令初始化模塊時,使用sprintf進行指令數據值整合
若將數據直接使用%d轉化成整形輸入,數據到buf中出現錯誤
unsigned char xdata buf_a[10] = {0}}, buf_b[10] = {0};
sprintf(buf_a, "val_a=%d\r\n", 1); // 輸出錯誤
sprintf(buf_b, "val_b=%d\r\n", 4);
嘗試將數據值加大測試
sprintf(buf_a, "val_a=%d\r\n", 255); // 一個字節,輸出錯誤
sprintf(buf_b, "val_b=%d\r\n", 256); // 兩個字節,出錯正確
輸入常數255的時候,佔一個字節,他就給你分配一個字節,輸入256的時候佔2個字節
他就給你分配兩個字節,兩個字節的數據,則可以輸出正確
驗證數據類型不同,輸出內容
unsigned char xdata val_a = 123;
unsigned int xdata val_b = 123;
sprintf(buf_a, "val_a=%d\r\n", val_a); // char型,一個字節,輸出錯誤
sprintf(buf_b, "val_b=%d\r\n", val_b); // int 型,兩個字節,輸出正確
查閱資料,keil51 內存沒有對齊,在使用1個字節sprintf時出現數據錯亂,
解決方法,在輸出%d時,將數據類型定義成兩個字節以上(short / int)。