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...

%02x与%2x

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

取mac信息的示例代码

// TestHardwareInfo.cpp : Defines the entry point for the console application. // #include "stdafx....

sprintf()会造成越界错误

sprintf()会造成越界,在释放内存,做delete时会报错误,使用的时候要注意。 例如:先建一字符数组,并给其分配内存        char *tmp = new char[255];    ...

利用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
  • 14548

C语言实现字节流与十六进制字符串的相互转换

原文出自:http://blog.csdn.net/qq387732471/article/details/7360988 //字节流转换为十六进制字符串 void ByteToHexStr...
  • pingD
  • pingD
  • 2014年12月15日 16:58
  • 23978

printf按8进制、16进制输出

printf()8进制、16进制输出格式控制:    int num = 0x9;    /*输出4位8进制的num*/    printf("%04o/n",num);    /*输出2位16进制的...

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

//注意必须是9,不然会造成越界 char buffer[9]; srand((unsigned)time(NULL)); //sprintf函数的作用是将右侧的数打印到buffer中,%08X...

sprintf,你知道多少?

选自《CSDN 社区电子杂志——C/C++杂志》http://emag.csdn.net 2005 年1 月 总第1 期 - 93 -本文作者:steedhorse(晨星)printf 可能是许多程序...
  • sjf331
  • sjf331
  • 2005年04月07日 14:46
  • 62123

sprintf函数详细介绍

  • 2017年02月21日 13:47
  • 179KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:sprintf %02x
举报原因:
原因补充:

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