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);
#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);
相关文章推荐
- DirectShow_基础与简单示例说明
- LeetCode103 BinaryTreeZigzagLevelOrderTraversal(二叉树Z形层次遍历) Java题解
- eclipse 中 properties 显示中文为\
- Java中的线程同步技术
- contiki SLIP代码分析
- c# json字符串转为对象
- java中文件的读取和写入
- js删除一个父元素下面的所有子元素
- bzoj1552&3506 robotic sort
- UVa 11475 - Extend to Palindrome
- Jquery翻书效果
- Spinnner和 AutoCompleteTextView联想输入框、popupwindow
- Bootstrap.main
- jquery easyUI dialog事件
- Unix网络编程学习笔记之第8章 基于UDP套接字编程
- Ext.net 关于datefield 控件
- PHP权重算法-用于游戏根据权限来随机物品
- php foreach详解
- 汇编语言10堆栈平衡
- jquery教程-Jquery 获取标签个数 size()函数用法