您现在的位置: 365建站网 > 365文章 > 记录log中的16进制和ASCII码字符输出

记录log中的16进制和ASCII码字符输出

文章来源:365jz.com     点击数:724    更新时间:2009-09-19 10:43   参与评论

写通信程序常常需要把发出和收到的包记录到log文件,而最常用的记录方式就是16进制和ASCII码左右对照的方式,

C代码  :

</>code

  1. 1: short DebugASCII( char *buf1, int leng, int line)

</>code

  1. 2: {

</>code

  1. 3: int i, j=0;

</>code

  1. 4: char s[100], temp[5];

</>code

  1. 5: 

</>code

  1. 6: printf( "Debug Information from Line: %04d\n", line);

</>code

  1. 7: 

</>code

  1. 8: for( i=0; i<leng; i++)

</>code

  1. 9: {

</>code

  1. 10: if ( j==0)

</>code

  1. 11: {

</>code

  1. 12: memset( s, ' ', 84);

</>code

  1. 13: sprintf(temp, " %03d:",i );

</>code

  1. 14: memcpy( s, temp, 5);

</>code

  1. 15: sprintf(temp, ":%03d",i+15 );

</>code

  1. 16: memcpy( &s[72], temp, 4);

</>code

  1. 17: }

</>code

  1. 18: sprintf( temp, "%02X ", (unsigned char)buf1[i]);

</>code

  1. 19: memcpy( &s[j*3+5+(j>7)], temp, 3);

</>code

  1. 20: if ( isprint( buf1[i]))

</>code

  1. 21: {

</>code

  1. 22: s[j+55+(j>7)]=buf1[i];

</>code

  1. 23: }

</>code

  1. 24: else

</>code

  1. 25: {

</>code

  1. 26: s[j+55+(j>7)]='.';

</>code

  1. 27: }

</>code

  1. 28: j++;

</>code

  1. 29: if ( j==16)

</>code

  1. 30: {

</>code

  1. 31: s[76]=0;

</>code

  1. 32: printf( "%s\n", s);

</>code

  1. 33: j=0;

</>code

  1. 34: }

</>code

  1. 35: }

</>code

  1. 36: if ( j)

</>code

  1. 37: {

</>code

  1. 38: s[76]=0;

</>code

  1. 39: printf( "%s\n", s);

</>code

  1. 40: }

</>code

  1. 41: }

C#代码:

</>code

  1. 1: string ToPrintLog = LogHex ( 16, 8, message );

</>code

  1. 2: 

</>code

  1. 3: public static string LogHex ( int lineWidth, int spaceIndent, byte[] data )

</>code

  1. 4: {

</>code

  1. 5: if ( data == null ) return null;

</>code

  1. 6: 

</>code

  1. 7: string temp;

</>code

  1. 8: string line = String.Empty;

</>code

  1. 9: 

</>code

  1. 10: StringBuilder sb = new StringBuilder ();

</>code

  1. 11: int j = 0;

</>code

  1. 12: 

</>code

  1. 13: for ( int i = 0; i < data.Length; i++ )

</>code

  1. 14: {

</>code

  1. 15: temp = data[i].ToString ( "X2" ).PadLeft ( 2, '0' ); //0xce -> "CE"

</>code

  1. 16: 

</>code

  1. 17: if ( j == 0 )

</>code

  1. 18: line = temp;

</>code

  1. 19: else

</>code

  1. 20: {

</>code

  1. 21: if ( (j+1) % spaceIndent == 0 )

</>code

  1. 22: line = line.Insert ( ( j >= spaceIndent ) ? 2 * j + 1 : ( 2 * j ), temp+" " );

</>code

  1. 23: else

</>code

  1. 24: line = line.Insert ( ( j >= spaceIndent ) ? 2 * j + 1 : ( 2 * j ), temp );

</>code

  1. 25: }

</>code

  1. 26: 

</>code

  1. 27: if ( data[i] >= 0x30 && data[i] <= 0x7E )

</>code

  1. 28: {

</>code

  1. 29: temp=( (char)data[i] ).ToString ();

</>code

  1. 30: }

</>code

  1. 31: else

</>code

  1. 32: {

</>code

  1. 33: temp= "." ;//invisible

</>code

  1. 34: }

</>code

  1. 35: 

</>code

  1. 36: line = line.Insert ( line.Length, temp );

</>code

  1. 37: 

</>code

  1. 38: j++;

</>code

  1. 39: 

</>code

  1. 40: if ( j == lineWidth )

</>code

  1. 41: {

</>code

  1. 42: sb.AppendLine ( line );

</>code

  1. 43: 

</>code

  1. 44: j = 0;

</>code

  1. 45: 

</>code

  1. 46: line = String.Empty;

</>code

  1. 47: }

</>code

  1. 48: else

</>code

  1. 49: {

</>code

  1. 50: if ( i == data.Length - 1 )

</>code

  1. 51: {

</>code

  1. 52: int comCount = 1;

</>code

  1. 53: 

</>code

  1. 54: if ( j >= spaceIndent )

</>code

  1. 55: comCount = 2 * lineWidth - 2 * j+1;

</>code

  1. 56: else

</>code

  1. 57: comCount = 2 * lineWidth - 2 * j +2;

</>code

  1. 58: 

</>code

  1. 59: for ( int m = 0; m < comCount; m++ )

</>code

  1. 60: {

</>code

  1. 61: line = line.Insert ( ( j >= spaceIndent ) ? 2 * j +1 : ( 2 * j ), " " );

</>code

  1. 62: }

</>code

  1. 63: sb.AppendLine ( line );

</>code

  1. 64: }

</>code

  1. 65: }

</>code

  1. 66: }

</>code

  1. 67: return sb.ToString();

</>code

  1. 68: }

 

输出结果样例:

</>code

  1. 1: 14A654A 20476459 14A654A 20476459 .JeJ .GdY .JeJ .GdY

</>code

  1. 2: 6646A49 20202020 6646A49 20202020 edjI .... edjI ....

</>code

  1. 3: 21F4A65 4A204764 21F4A65 4A204764 ..Je J.Gd ..Je J.Gd

</>code

  1. 4: 565646A 49203130 565646A 49203130 Yedj I.10 Yedj I.10

</>code

  1. 5: 2202020 20202020 2202020 20202020 .... .... .... ....
返回 返回

如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛

发表评论 (724人查看0条评论)
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
昵称:
最新评论
------分隔线----------------------------

快速入口

· 365软件
· 杰创官网
· 建站工具
· 网站大全

其它栏目

· 建站教程
· 365学习

业务咨询

· 技术支持
· 服务时间:9:00-18:00
365建站网二维码

Powered by 365建站网 RSS地图 HTML地图

copyright © 2013-2024 版权所有 鄂ICP备17013400号