字节码流打印,将收到的数据以码流形式打印出来

开发中通长会遇到两边通信解析数据失败的情况,这时候我们可以打印两边的码流来看看打印的字节序等数据,看看发的和收的是不是一致的,解析的位置如有偏差,就可以调整头部偏移来进行解析了。


#include <stdio.h>
#include <ctype.h>
#include <string.h>
#define BUFFERSIZE 68
#define PAGELINES  20
typedef char    cyg_uint8  ;
typedef unsigned int CYG_ADDRWORD;
typedef int __printf_fun(const char *fmt, ...);

void diag_vdump_buf_with_offset(__printf_fun *pf,
                            cyg_uint8     *p,
                            CYG_ADDRWORD   s,
                            cyg_uint8     *base)
 {
     int i, c;

     if ((CYG_ADDRWORD)s > (CYG_ADDRWORD)atoi(p)) {
         s = (CYG_ADDRWORD)s - (CYG_ADDRWORD)atoi(p);
     }
     while ((int)s > 0) {
         if (base) {
             (*pf)("%08X: ", (CYG_ADDRWORD)atoi(p) - (CYG_ADDRWORD)atoi(base));
         } else {
             (*pf)("%08X: ", p);
         }
         for (i = 0;  i < 16;  i++) {
             if (i < (int)s) {
                 (*pf)("%02X ", p[i] & 0xFF);
             } else {
                 (*pf)("   ");
             }
         if (i == 7) (*pf)(" ");
         }
         (*pf)(" |");
         for (i = 0;  i < 16;  i++) {
             if (i < (int)s) {
                 c = p[i] & 0xFF;
                 if ((c < 0x20) || (c >= 0x7F)) c = '.';
             } else {
                 c = ' ';
             }
             (*pf)("%c", c);
         }
         (*pf)("|\n");
         s -= 16;
         p += 16;
     }
 }
 
 void
 diag_dump_buf_with_offset(cyg_uint8     *p,
                           CYG_ADDRWORD   s,
                           cyg_uint8     *base)
 {
     diag_vdump_buf_with_offset(printf, p, s, base);
 }
 
 void
 diag_dump_buf(void *p, CYG_ADDRWORD s)
 {
    diag_dump_buf_with_offset((cyg_uint8 *)p, s, 0);
 }
int print16(void *buf, int addrword)
{
	diag_dump_buf(buf, addrword);
	return 0;
}

比如调用print16(buf,1024);来打印收到的msg;就可以得到下面的码流。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值