• 主页
  • 系统维护与使用
  • 应用程序开发
  • 内核源代码
  • 驱动程序开发
  • CPU和硬件区
  • UNIX文化
  • Solaris
  • Power Linux

(100)想做一个程序,将收到的信息以16进的方式打的屏幕上。总也不成功?

onedayonehole 2005-03-24 06:27:48
/*
函数说明:将接收到的字节数据以16进制的方式打印到屏幕
参数说明:
创建日期:2005-3-24 13:57
*/
void DebugX (const char *pSource,int iLen)
{
int i;int n = 0;char c;
for(i = 0; i < iLen - 1; i++)
{
c = pSource[i] >> 4;
if(c >= 0 && c <=9)
c = c + '0';
else
c = c + 'A' - 0x0A + 16;

printf("%c",c);

c = pSource[i] & 0x0F;
if(c >= 0 && c <=9)
c = c + '0';
else
c = c + 'A' - 0x0A;
printf("%c ",c);

if(n++ > 40)
{
n = 0;
printf("\n");
}
}
printf("\n");
}
??????
...全文
67 点赞 收藏 5
写回复
5 条回复
geopower 2005年03月25日
#include<iomanip.h>

cout<<hex<<n;
回复 点赞
nodummy 2005年03月24日
转换到int*是一种不好的行为,因为不是所有的平台都是Big Endian的,这样的行为将导致Little Endian平台上,4字节输出的时候产生字节倒序的问题……
回复 点赞
sharkhuang 2005年03月24日
printf("%X",*((int*)pSource)++)
回复 点赞
TangChin 2005年03月24日
就是嘛,如果你没什么特殊应用
就用printf的%x就好啦。
回复 点赞
nodummy 2005年03月24日
何苦呢?看得都累啊……

不在乎效率的话,直接用printf("%2.2X",*pSource++)就可以了,记住做个循环

效率高点的话那就一次性多输出几个字符,这样就会好点……

不过就算是上面那个效率低的我也觉得不会比你的代码效率低多少……
回复 点赞
发动态
发帖子
Linux/Unix社区
创建于2007-08-27

7067

社区成员

7.3w+

社区内容

Linux/Unix社区 应用程序开发区
社区公告
暂无公告