常用工具:16进制宏定义--有注解

107 篇文章 0 订阅
22 篇文章 0 订阅
#define HexPrint(_buf, _len) {\
    int _m_i = 0;\
    char *_m_buf = (char *)(_buf);\
    int _m_len = (int)(_len);\
    time_t currentTime = time(NULL);\
    struct tm* localTime = localtime(&currentTime);\
    char timeStr[100]={0};\
    strftime(timeStr, sizeof(timeStr), "%Y-%m-%d %H:%M:%S", localTime);\
    printf("[%s][%s:%d] \r\n", timeStr,__FUNCTION__, __LINE__);\
    printf("*****************************\n");\
    for(_m_i = 0; _m_i < _m_len; _m_i++)\
    {\
        printf(YELLOW "%02x " NONE, _m_buf[_m_i] & 0xff);\
        if(!((_m_i+1) % 10)) printf("\n");\
    }\
    printf("\nsize = %d\n*****************************\n", _m_len);\
}

#define HexPrint(_buf, _len) {\
    int _m_i = 0; // 定义循环变量_m_i,用于遍历缓冲区
    char *_m_buf = (char *)(_buf); // 将传入的缓冲区转换为字符型指针_m_buf
    int _m_len = (int)(_len); // 将传入的长度转换为整型变量_m_len
    time_t currentTime = time(NULL); // 获取当前时间的时间戳
    struct tm* localTime = localtime(&currentTime); // 将时间戳转换为本地时间结构体指针localTime
    char timeStr[100]={0}; // 定义存储格式化时间字符串的字符数组timeStr
    strftime(timeStr, sizeof(timeStr), "%Y-%m-%d %H:%M:%S", localTime); // 格式化时间字符串并存储到timeStr数组中

以上是对给定代码宏定义的注释,它定义了一个名为HexPrint的宏。在宏定义中,声明了一些局部变量,并获取了当前时间,并将其格式化为字符串形式存储在timeStr中。但是,在提供的代码片段中,没有显示宏的后续部分,因此无法确定该宏在后续代码中是否被使用。如果提供宏的完整代码,我可以提供更具体的帮助和解释。

printf("[%s][%s:%d] \r\n", timeStr, __FUNCTION__, __LINE__);

这行代码使用printf函数打印了一个格式化的字符串。它包含以下内容:

  • [%s]:用于打印时间字符串,使用变量timeStr作为参数。
  • [%s:%d]:用于打印函数名称和行号。__FUNCTION__是一个预定义的宏,表示当前所在的函数名;__LINE__也是一个预定义的宏,表示当前所在的行号。

通过在printf函数中使用这些格式说明符和相应的变量,可以打印出类似[2024-02-23 12:34:56][function_name:42]的日志信息,其中时间、函数名和行号会根据实际情况进行替换。这种技巧通常用于调试和记录日志时,方便追踪代码执行流程和定位问题。

for (_m_i = 0; _m_i < _m_len; _m_i++)\
{\
    printf(YELLOW "%02x " NONE, _m_buf[_m_i] & 0xff); // 打印缓冲区中的字节,使用黄色显示
    if (!((_m_i + 1) % 10)) printf("\n"); // 每打印10个字节后换行
}

这段代码是一个for循环,用于遍历缓冲区并打印其中的字节。具体的操作包括:

  • printf(YELLOW "%02x " NONE, _m_buf[_m_i] & 0xff):打印缓冲区中当前字节的值,使用黄色作为输出颜色。
  • if (!((_m_i + 1) % 10)) printf("\n"):当已经打印了10个字节后,进行换行操作。

通过这段代码,可以将缓冲区中的字节按照每行10个字节的格式打印出来,以便查看和调试。在打印字节之前,使用YELLOW宏定义的黄色进行修饰,使得打印的字节在终端中以黄色显示。

在这个上下文中,%02x0xff都是与十六进制数值相关的表达式。

  • %02x是一个格式说明符,在printf函数中用于打印无符号整数以十六进制形式显示,并保持至少两位宽度。其中,%02x表示使用两位字符来显示一个无符号整数的十六进制值,不足两位时在前面补零。
  • 0xff是一个十六进制字面量,表示十六进制数255的值。在这段代码中,0xff被用作掩码操作,通过与缓冲区中的字节按位与运算(_m_buf[_m_i] & 0xff),可以确保只取低8位的值,忽略高8位。

综合起来,%02x用于将缓冲区中的字节按照两位宽度的十六进制形式打印出来,而0xff则是用作掩码操作,确保只取低8位的值进行打印。

  • 25
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 16
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Respect@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值