協(xié)議的編寫 (sprintf的用法)
有時候編寫協(xié)議的時候,需要進行一定格式的數(shù)據(jù)返回.
比如把十進制數(shù)據(jù)按返回十六進制放到指令中, 4096對應(yīng)的十六進制就是0x10 0x00.
即4096變換成十六進制0x1000,然后拆分成兩個字節(jié):0x10和0x00.

上面這種情況就可以用sprintf函數(shù).
怎么把一個速度(4096),轉(zhuǎn)換成十六進制的 0x10 ,0x00?進行返回呢?
步驟1:
int rate=4096;
然后進行移位:
unsigned?int part1=0;
unsigned int part2=0;
part1=((unsigned int)rate)<<8;
part2=((unsigned int)rate);
然后調(diào)用sprintf進行數(shù)據(jù)格式的轉(zhuǎn)換,并填充到緩存中.
char?DataBuf[50]={0};
? sprintf(DataBuf,"$DATA,%2x,%2x*",
(uint32_t)part1,??
(uint32_t)part2 ??
);
這樣rate就會被分成兩部分,放入到DataBuf[]中了,并且是十六進制的.

如果想要在里面添加?xùn)|西.比如包尾校驗.
DataCheckSum = DataCheck(DataBuf);
sprintf(BufOut,"%s%02X\r\n",DataBuf,DataCheckSum);
這樣就可以把數(shù)據(jù)保存到BufOut[]中了.
標簽: