关于sprintf函数和HalUARTWrite函数字符串打印的应用

   
  void SampleApp_SendPointToPointMessage( void )
{
  
  //uint8 *abc ;
  //abc= *pBuf++; //这个指针怎么处理呢,或者说下面的参数怎么处理
  //uint16 data=10;
  //uint16 j = 0;
  
  
           rtgItem_t rt;
           NLME_GetRequest(nwkRoutingTable,0,&rt);
 char msg[100] = {0};
 uint16 i = 0x2040;
  //i=NLME_GetRequest(nwkNumRoutingTableEntries  ,j,&data);
  i=NLME_GetShortAddr();
  sprintf(msg, "number:%x\n", i );  //换行符号的\nASCII码为10,居然被当作A输出了。因为A的ASCII码值为1
  HalUARTWrite( 0, msg,osal_strlen("number:%x\n"));
 
  
  
  //sprintf(msg, "ssssss:%x\n", i );
  //HalUARTWrite( 0, msg, 9);
  
  
}

   如上代码所示,这样的话换行符号被当作ASCII值被输出了,不能达到理想的输出效果。以下代码为在Zstack中:
将其修改为如下即可实现理想的输出并换行操作:

void SampleApp_SendPointToPointMessage( void )
{
  
  //uint8 *abc ;
  //abc= *pBuf++; //这个指针怎么处理呢,或者说下面的参数怎么处理
  //uint16 data=10;
  //uint16 j = 0;
  
  
           rtgItem_t rt;
           NLME_GetRequest(nwkRoutingTable,0,&rt);
 char msg[100] = {0};
 uint16 i = 0x2040;
  //i=NLME_GetRequest(nwkNumRoutingTableEntries  ,j,&data);
  i=NLME_GetShortAddr();
  sprintf(msg, "number:%x\n", i );  
  HalUARTWrite( 0, msg,osal_strlen("number:%x\n"));
  HalUARTWrite( 0, "\n",1);
 
  
  
  //sprintf(msg, "ssssss:%x\n", i );
  //HalUARTWrite( 0, msg, 9);
  
  
}
 PS:另外熟悉知识点: HalUARTWrite函数中的字符长度不包括\0,strlen函数也不包括,sizeof函数包括需要加1(长度)。字符串输出函数的长度一定要控制好,要不然就会出现意想不到的错误。


猜你喜欢

转载自blog.csdn.net/wearlee/article/details/79876496