sprintf %02x

转载 2015年07月09日 17:08:13
#include<stdio.h>
#include<bios.h>
#define lo(f) ((f)&0xff)
#define hi(f) (lo(f>>8))
int main(void)
{
int key;
do
{
 key=bioskey(0);
 printf("0x%02x 0x%02x %c\n",hi(key),lo(key),lo(key));//这条语句中0x%02x是什么意思??
}
while(key!=0x011b);
/*printf("hello world");*/
return 0;
}

%02X什么意思啊!
格式控制:     以十六进制输出,2为指定的输出字段的宽度.如果位数小于2,则左端补0

就是说hi(key)的返回值,将以十六进制,并且显示2位的方式显示。
例如:hi(key)==0x09
那么0x%02x 就显示为 0x09,如果你用0x%x 就显示为0x9


//   以1   6进制方式按字节显示数据
void   ShowHex(void   *   pv,int   size)
{
char   *   pc=new   char[100];   //   临时字符数组,获取整个数据的16进制表示
char   *   temppc=new   char[10];   //   临时字符数组,获取单个字节的16进制表示
if((pc!=NULL)&&(temppc!=NULL))
{
strcpy(pc, " ");   //清空
for(int   i=0;i <size;i++)   //   根据数据的字节长度来循环
{
sprintf(temppc, "%02X   ",((unsigned   char   *)pv)[i]);//问题所在
strcat(pc,temppc);
}
cout < <pc < <endl;//显示16进制方式的数据并回车
}
sprintf(temppc, "%02X   ",((unsigned   char   *)pv)[i]);//问题所在

-----> 这个是C语言的基本函数啊,就是一个字符串的输出函数,和printf的差别在于它输出定向到一个字符缓冲(temppc)。
在CB的HELP中,敲入sprintf,看到完整帮助

sprintf(temppc, "%02X   ",((unsigned   char   *)pv)[i]);

将pv当前字节按16进制显示到temppc。

%02X  与  %2X
If   width   is   prefixed   with   0,   zeros   are   added   until   the   minimum   width   is   reached.   If   0   and   –   appear,   the   0   is   ignored.   If   0   is   specified   with   an   integer   format   (i,   u,   x,   X,   o,   d)   the   0   is   ignored.   

就是说一般情况下表示在左侧填充'0’,直到达到声明的长度。但是又用了'-’标志的,及转换i,   u,   x,   X,   o,   d这些数字时,'0’标志被忽略。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    char data[6] = {0x01,0x26,0x0A,0x0B,0x21,0x23};
    char buffer[100];
    memset(buffer, 0, sizeof(buffer));
    sprintf(buffer, "%02X:%02X:%02X:%02X:%02X:%02X", data[0],data[1], data[2],data[3], data[4],data[5]);
    printf("转换后:%s\n", buffer);
    printf("转换后length:%d\n", strlen(buffer));
    system("pause");
    return 0;
}
显示 strlen(buffer) = 17 (2*6 + 5);

%02x 格式化符号代表什么

%02x     格式控制: 以十六进制输出,2为指定的输出字段的宽度.如果位数小于2,则左端补0 If width is prefixed with 0, zeros are added un...
  • meegomeego
  • meegomeego
  • 2013年03月27日 13:19
  • 9698

C语言中的printf(),sprintf(),scanf(),sscanf()

printf 语法:  #include int printf( const char *format, ... ); printf()函数根据format(格式)给出的格式打印输出到STDOUT...
  • SMF0504
  • SMF0504
  • 2016年05月02日 11:08
  • 3469

%02x与%2x

代码做得多的人,肯定经常见到%02x这个东西,下面写个小程序学习一下: #include int main() { int i; for(i = -20; i < 21; i++)...
  • stpeace
  • stpeace
  • 2013年10月27日 12:29
  • 10677

micro_httpd代码解释

一款轻量型的WEB服务器,代码托管在点击打开链接 /** Copyright ? 1999,2005 by Jef Poskanzer . ** All rights reserved. ** **...
  • ffddybz
  • ffddybz
  • 2013年06月26日 17:28
  • 975

epoll_server实现web服务器

epoll_server.h #ifndef _EPOLL_SERVER_H #define _EPOLL_SERVER_H int init_listen_fd(int port, int...
  • jinduozhao
  • jinduozhao
  • 2017年07月20日 22:44
  • 72

利用sprintf和sscanf实现十六进制和十进制之间的相互转换

#include int main() { char s[100] = {0}; sprintf(s, "%x", 15); printf("%s\n", s); // f ...
  • stpeace
  • stpeace
  • 2013年10月27日 12:49
  • 17173

printf, sprintf,输出数据类型

转自:http://blog.csdn.net/willy3000/article/details/5786888 字符的参数类型 ;输出形式 d,i     int类型;显示...
  • qaz13177_58_
  • qaz13177_58_
  • 2014年03月04日 10:38
  • 3237

C++自动生成16进制数并且用 sprintf函数输出大写8位16进制数

//注意必须是9,不然会造成越界 char buffer[9]; srand((unsigned)time(NULL)); //sprintf函数的作用是将右侧的数打印到buffer中,%08X...
  • u010376543
  • u010376543
  • 2013年12月08日 10:19
  • 2254

printf按8进制、16进制输出

printf()8进制、16进制输出格式控制:    int num = 0x9;    /*输出4位8进制的num*/    printf("%04o/n",num);    /*输出2位16进制的...
  • summer_liuwei
  • summer_liuwei
  • 2010年04月08日 21:43
  • 71363

%02x与%2x 之间的区别

输出最小宽度 用十进制整数来表示输出的最少位数。若实际位数多于定义的宽度,则按实际位数输出,若实际位数少于定义的宽度则补以空格或0(当最小宽度数值以0开头时)。 X 表示以十六进制形式输出 02 表...
  • u013443618
  • u013443618
  • 2016年03月09日 09:19
  • 11122
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:sprintf %02x
举报原因:
原因补充:

(最多只允许输入30个字)