MyDriverC

广博,创新

sprintf %02x

#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);
阅读更多
个人分类: 语言基础 算法
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭