打印

printf打印数组内容为十六进制数据的怪问题

[复制链接]
8732|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hhchenxinag|  楼主 | 2013-3-2 21:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 hhchenxinag 于 2013-3-3 10:48 编辑

const uchar xdata send_addr[]={0x99,0x99,0x99,0x99,0x99,0x99,0x01,0x02,0x11,0xc0};  需打印的数据
执行函数:for(i=0;i<10;i++)
        { printf("%x",send_addr);
                }
数据结果:99 0a 99 0a 99 0a 99 0a ...  在每个正确数据中夹0a    真不知道是怎么回事  望碰到过类似的前辈指点!!


下面是我整个测试程序:  打印结果为 fe 00 dd 00 de 00

请大家帮我看看 麻烦了!  真不知道是什么问题!!
/**************************************************************************
  执行思路:首先串口软件发送一个字符 ,进入接收中断函数,再打印数组里面的值
*************************************************************************/
#include <reg52.h>   
#include<stdio.h>  
#define uchar unsigned char
#define uint unsigned int
unsigned char flag,a,i;
uchar rx[8];
uchar code table[]="I get ";
uchar  xdata add[]={0xfe,0xdd,0xde};
//uchar code table[]={'I',' ','g','e','t',' '};
void init()
{
TMOD=0x20; //定时器1 8位自动重装
TH1=0xfd; //波特率9600
TL1=0xfd;
TR1=1;    //开定时器1
SM0=0;    //方式1
SM1=1;
REN=1;    //允许接收中断
EA=1;   //开总中断
ES=1;   //开串口中断
}
void main()
{
init();
while(1)
{
  if(flag==1)
  {
   ES=0;
   for(i=0;i<6;i++)
   {
    SBUF=table【i】; //这个【i】在论坛显示不出来只能加个中文格式的
    while(!TI);
    TI=0;
   }
   SBUF=a;
   while(!TI);
   TI=0;
   TI=1;
   for(i=0;i<3;i++)  //打印的执行函数
   {
     printf("%2x",add);
   }   
   while(!TI);
   TI=0;
   ES=1;
   flag=0;
  }
}
}
void ser() interrupt 4  
{
RI=0;
a=SBUF;
flag=1;
}

相关帖子

沙发
dirtwillfly| | 2013-3-3 08:58 | 只看该作者
本帖最后由 dirtwillfly 于 2013-3-3 08:59 编辑

奇怪的问题,我没遇到过。你调试的时候,看看这个数组所在地址的真实数据情况,不要只看打印出来的。

使用特权

评论回复
板凳
ayb_ice| | 2013-3-3 09:47 | 只看该作者
格式不对吧

使用特权

评论回复
地板
znz43| | 2013-3-3 10:03 | 只看该作者
试试 printf("%2x",send_addr[i]);

使用特权

评论回复
5
hhchenxinag|  楼主 | 2013-3-3 10:40 | 只看该作者
dirtwillfly 发表于 2013-3-3 08:58
奇怪的问题,我没遇到过。你调试的时候,看看这个数组所在地址的真实数据情况,不要只看打印出来的。
...

我把整个测试程序 贴出来了 ,帮我看看是不是 程序还是格式有问题!!  谢谢了!!

使用特权

评论回复
6
hhchenxinag|  楼主 | 2013-3-3 10:42 | 只看该作者
ayb_ice 发表于 2013-3-3 09:47
格式不对吧

刚从新编辑了 把整个测试的程序贴出来了   结果 中间夹个00    麻烦再看下  指点一二!

使用特权

评论回复
7
hhchenxinag|  楼主 | 2013-3-3 10:44 | 只看该作者
znz43 发表于 2013-3-3 10:03
试试 printf("%2x",send_addr);

这个刚试了  结果一样,   刚从新编辑了下  把整个测试的程序贴出来了  输出结果这个却是 夹个00
   麻烦再看下  不胜感激!!

使用特权

评论回复
8
mohanwei| | 2013-3-3 11:16 | 只看该作者
改成:
printf("%02X ",(int)send_addr[i]);

使用特权

评论回复
9
hhchenxinag|  楼主 | 2013-3-3 12:37 | 只看该作者
mohanwei 发表于 2013-3-3 11:16
改成:
printf("%02X ",(int)send_addr);

强,加个变量就解决了  ,望前辈解释下!!! 真心感谢

使用特权

评论回复
10
zhaofy521| | 2013-3-3 14:36 | 只看该作者
printf("%bX ",send_addr);应该可以,试试

使用特权

评论回复
11
mohanwei| | 2013-3-3 17:21 | 只看该作者
hhchenxinag 发表于 2013-3-3 12:37
强,加个变量就解决了  ,望前辈解释下!!! 真心感谢

你搜一下编译器手册,看一下printf的格式控制符就知道了,这个函数内部就要求这样写的……

使用特权

评论回复
12
mohanwei| | 2013-3-3 17:24 | 只看该作者
zhaofy521 发表于 2013-3-3 14:36
printf("%bX ",send_addr);应该可以,试试

"%bX "好像是keil专用的……换成其他编译器都不认。从移植性考虑,建议还是在后面的变量前统一加个(int)强制转换。
随着编程能力的提高,大部分刚开始只搞MCU的都会慢慢涉及一些上位机编程,这时候能把底下的代码直接拷贝过来用就显得很重要了

使用特权

评论回复
13
hhchenxinag|  楼主 | 2013-3-4 13:57 | 只看该作者
mohanwei 发表于 2013-3-3 17:24
"%bX "好像是keil专用的……换成其他编译器都不认。从移植性考虑,建议还是在后面的变量前统一加个(int) ...

可以 用 谢谢

使用特权

评论回复
14
hhchenxinag|  楼主 | 2013-3-4 13:58 | 只看该作者
mohanwei 发表于 2013-3-3 17:21
你搜一下编译器手册,看一下printf的格式控制符就知道了,这个函数内部就要求这样写的…… ...

是的 ,好像都加了 (int)

使用特权

评论回复
15
hhchenxinag|  楼主 | 2013-3-4 13:59 | 只看该作者
mohanwei 发表于 2013-3-3 17:21
你搜一下编译器手册,看一下printf的格式控制符就知道了,这个函数内部就要求这样写的…… ...

每个语句  都加了 (int)  又知道了一点,下次知道类似的问题了  谢谢@@

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

50

帖子

0

粉丝