您的位置:首页 > 其它

sprintf %02x

2015-07-09 17:08 369 查看
#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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: