关于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(长度)。字符串输出函数的长度一定要控制好,要不然就会出现意想不到的错误。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值