谢谢!
#include <stdio.h>
#include <stdarg.h>
//#define _EMU_ // bc3.0 build use
#ifdef _EMU_
#define code const
#define xdata
#endif
void FormatData( char* pszGetData,const char* pszFormat,... )
{
va_list ap;
va_start( ap, pszFormat );
vsprintf( pszGetData, pszFormat, ap );
va_end( ap );
}
void main( void )
{
code unsigned char bTestData[] = {
0x00,0x11,0x22,0x33,0x44,0x55 };
unsigned int nIntData;
code char* pszStr = "This is a
TEST!";
xdata char szTestBuf[1024+1];
while( 1 )
{
// after this,The szTestBuf data is not "Get HEX IS: 00
11 22 33 44 55",Why?
FormatData( szTestBuf,"Get HEX IS: %02x %02x %02x %02x %
02x %02x",
bTestData[0],bTestData[1],bTestData[2],bTestData
[3],bTestData[4],bTestData[5] );
#ifdef _EMU_
printf( "\n%s\n",szTestBuf );
#endif
nIntData = 12345;
FormatData( szTestBuf,"Get INT is: %d Get string is: %
s",nIntData,pszStr );
#ifdef _EMU_
printf( "%s",szTestBuf );
break;
#endif
}
}
修改为
FormatData( szTestBuf,"Get HEX IS: %02x %02x %02x %02x %02x %02x",
(int) bTestData[0], (int)bTestData[1], (int)bTestData[2], (int)bTestData[3], ( int)bTestData[4], (int)bTestData[5] );
因为vspritf和printf的%d参数都为int形,而且编译器不会替你转换。
这种想法我也试过(我把bCmd[]的类型由BYTE改为int),而且可行。但我认为这个问题是编译器的问题,如果vspritf和printf的%d参数都为int形的话,那么这样给使用者有很大的不便!而且如果类型位int的话那么在函数传递的过程中应该自动进行类型转换,不知为什么没有进行类型转换呢?
FormatData( szTestBuf,"Get HEX IS: %b02x %b02x %b02x %b02x %b02x %b02x",
bTestData[0],bTestData[1],bTestData[2],bTestData[3],bTestData[4],bTestData[5] );
再次感谢【龙芯四十三号】大侠!!!!!!!!!!!!!!!!