项目开发中常用的十六进制方式打印实现

条码软件如何设置十六进制并跳号打印 很多用户在使用条码软件制作流水号时,会比较迷茫16进制的流水号该怎么制作,不知道在软件中怎么设置或者如何选择才可以制作十六进制的流水号,而且想要实现16进制的跳号打印就更不知道如何操作了,下面我们就中琅条码软件来为大家演示一下,如何制作十六进制的流水号,以及如何实现跳号打印。 一、实现十六进制数据递增效果 我们打开中琅条码软件,新建标签纸,然后在标签纸上添加文本内容,并双击文本,在其“图形属性-数据源”中,点击左侧修改,先将固定内容使用手动输入方式添加,然后再使用“序列生成”的方式添加数据,中琅条码软件中 阅读详情

在项目开发中,比如网络开发,多媒体播放开发等,常常用到将接受数据和发送数据或者需要解析的数据,用打印方式呈现。方便自己定位问题。

在这个时候,printf难免没有满足我们的需要了。因为printf("bufdata =%s\n",bufdata),是用字符串方式输出,当碰到字符串中存在'\0'的时候,就会停止输出,造成打印不全,甚至打印死机(当字符串中没有'\0'结束符的时候,就会出现非法数据访问,造成死机)。下面介绍一种通用的16进制打印方式。简单易用。

/*
* 十六进制方式打印
* 应用场合:1)打印抓回来的网络包数据 
*			2)打印多媒体码流数据
*/
#include <stdio.h>
//十六进制和ASCII码打印
extern int func_hex_printout(const char* tag , const char* buf ,unsigned int  len ,  int  wide);

//十六进制打印
extern int func_hex_printout2(const char* tag , const char* buf ,unsigned int  len ,  int  wide);

//ASCII码打印
extern int func_hex_printout3(const char* tag , const char* buf ,unsigned int  len ,  int  wide);

#define HEX_INFO(tag , buf , buf_len) func_hex_printout(tag , buf , buf_len ,16)  
#define HEX_INFO2(tag , buf , buf_len) func_hex_printout2(tag , buf , buf_len ,16)  
#define HEX_INFO3(tag , buf , buf_len) func_hex_printout3(tag , buf , buf_len ,16)  

int main(int argc ,char *argv[])
{

	char TAG[] = "DEBUG";
	char buf[128] = "abcdefghijklmnopqrstuvwxyz\n\r\0\t123456789";
	int len = sizeof(buf);
	HEX_INFO(TAG , buf , len);
	HEX_INFO2(TAG , buf , len);
	HEX_INFO3(TAG , buf , len);
	return 0;
}

/*重定义符合目前操作系统显示的打印函数*/
#define INFO_PRINT printf

/*
*函数功能:十六进制和ASCII码打印
*参数:tag 打印标签
	   buf 数据
	   len 数据buf长度
	   wide 字宽
*/
int func_hex_printout(const char* tag , const char* buf ,unsigned int  len ,  int  wide)
{

    int i = 0 ;
    int ret     = 0;
    int nTabs   = 0;
    int nlines  = 0;
    char msgbuf[128] = {0};
    const char hex_char[] = "0123456789ABCDEF";
    const unsigned char *ptr = (const unsigned char*)buf;
    if ((NULL == tag) || (NULL == buf) || ((8 != wide) && (16 != wide)))
    {
        return ret;
    }
	//打印buf的内存地址和输出打印的长度。
    INFO_PRINT("%s buf addr=%08lx, buf len=%ld bytes\n", tag, buf, len);
    /* calculate how many prefixing Tab */
    while ((*tag == '\r') || (*tag == '\n'))
    {
        tag++;              // skip prefixing '\r' or '\n'
    }
    while (*tag++ == '\t')
    {
        nTabs++;
        if (6 == nTabs)
        {
            break;
        }
    }
    if (8 == wide)
    {
        nlines = (len + 0x07) >> 3;
    }
    else if (16 == wide)
    {
        nlines = (len + 0x0f) >> 4;
    }

    for (i = 0; i < nlines; i++)
    {
        int j = 0;
        char *dst  = msgbuf;
        int nbytes = ((int)len < wide) ? len : wide;
        for (j = 0; j < nTabs; j++)
        {
            *dst++ = '\t';
        }
        *dst++ = ' ';
        *dst++ = ' ';
        *dst++ = ' ';
        *dst++ = ' ';
        for (j = 0; j < nbytes; j++)
        {
            unsigned char ival = *ptr++;
            //一个char型变量用16进制输出,然后再输出一个空格,共占用三个字符空间
            *dst++ = hex_char[(ival >> 4) & 0x0F];
            *dst++ = hex_char[ival & 0x0F];
            *dst++ = ' ';
        }
        //输出一行数值后,输出三个空格,再输出该行数值的ASCII码字符
        //若nbytes小于一行的长度,即小于8或16,则以三个空格代替一个数值输出
        for (j = 0; j < wide - nbytes + 1; j++)
        {
            *dst++ = ' ';
            *dst++ = ' ';
            *dst++ = ' ';
        }
        ptr -= nbytes;
        for (j = 0; j < nbytes; j++)
        {
            if ((*ptr >= 0x20) && (*ptr <= 0x7e))
            {
                *dst = *ptr;
            }
            else
            {
                *dst = '.';
            }
            ptr++;
            dst++;
        }
        *dst = 0;
        ret += INFO_PRINT("%s\n", msgbuf);
        len -= nbytes;
    }
    return ret;
}

/*
*函数功能:十六进制打印
*参数:tag 打印标签
	   buf 数据
	   len 数据buf长度
	   wide 字宽
*/
int func_hex_printout2(const char* tag , const char* buf ,unsigned int  len ,  int  wide)
{

    int i = 0 ;
    int ret     = 0;
    int nTabs   = 0;
    int nlines  = 0;
    char msgbuf[128] = {0};
    const char hex_char[] = "0123456789ABCDEF";
    const unsigned char *ptr = (const unsigned char*)buf;
    if ((NULL == tag) || (NULL == buf) || ((8 != wide) && (16 != wide)))
    {
        return ret;
    }
	//打印buf的内存地址和输出打印的长度。
    INFO_PRINT("%s buf addr=%08lx, buf len=%ld bytes\n", tag, buf, len);
    /* calculate how many prefixing Tab */
    while ((*tag == '\r') || (*tag == '\n'))
    {
        tag++;              // skip prefixing '\r' or '\n'
    }
    while (*tag++ == '\t')
    {
        nTabs++;
        if (6 == nTabs)
        {
            break;
        }
    }
    if (8 == wide)
    {
        nlines = (len + 0x07) >> 3;
    }
    else if (16 == wide)
    {
        nlines = (len + 0x0f) >> 4;
    }

    for (i = 0; i < nlines; i++)
    {
        int j = 0;
        char *dst  = msgbuf;
        int nbytes = ((int)len < wide) ? len : wide;
        for (j = 0; j < nTabs; j++)
        {
            *dst++ = '\t';
        }
        *dst++ = ' ';
        *dst++ = ' ';
        *dst++ = ' ';
        *dst++ = ' ';
        for (j = 0; j < nbytes; j++)
        {
            unsigned char ival = *ptr++;
            //一个char型变量用16进制输出,然后再输出一个空格,共占用三个字符空间
            *dst++ = hex_char[(ival >> 4) & 0x0F];
            *dst++ = hex_char[ival & 0x0F];
            *dst++ = ' ';
        }
        *dst = 0;
        ret += INFO_PRINT("%s\n", msgbuf);
        len -= nbytes;
    }
    return ret;
}

/*
*函数功能:ASCII码打印
*参数:tag 打印标签
	   buf 数据
	   len 数据buf长度
	   wide 字宽
*/
int func_hex_printout3(const char* tag , const char* buf ,unsigned int  len ,  int  wide)
{

    int i = 0 ;
    int ret     = 0;
    int nTabs   = 0;
    int nlines  = 0;
    char msgbuf[128] = {0};
    const char hex_char[] = "0123456789ABCDEF";
    const unsigned char *ptr = (const unsigned char*)buf;
    if ((NULL == tag) || (NULL == buf) || ((8 != wide) && (16 != wide)))
    {
        return ret;
    }
	//打印buf的内存地址和输出打印的长度。
    INFO_PRINT("%s buf addr=%08lx, buf len=%ld bytes\n", tag, buf, len);
    /* calculate how many prefixing Tab */
    while ((*tag == '\r') || (*tag == '\n'))
    {
        tag++;              // skip prefixing '\r' or '\n'
    }
    while (*tag++ == '\t')
    {
        nTabs++;
        if (6 == nTabs)
        {
            break;
        }
    }
    if (8 == wide)
    {
        nlines = (len + 0x07) >> 3;
    }
    else if (16 == wide)
    {
        nlines = (len + 0x0f) >> 4;
    }

    for (i = 0; i < nlines; i++)
    {
        int j = 0;
        char *dst  = msgbuf;
        int nbytes = ((int)len < wide) ? len : wide;
        for (j = 0; j < nTabs; j++)
        {
            *dst++ = '\t';
        }
        *dst++ = ' ';
        *dst++ = ' ';
        *dst++ = ' ';
        *dst++ = ' ';
        for (j = 0; j < nbytes; j++)
        {
            if ((*ptr >= 0x20) && (*ptr <= 0x7e))
            {
                *dst = *ptr;
            }
            else
            {
                *dst = '.';
            }
            ptr++;
            dst++;
        }
        *dst = 0;
        ret += INFO_PRINT("%s\n", msgbuf);
        len -= nbytes;
    }
    return ret;
}

PC终端运行效果如下:


Python中以十六进制打印输出的方法 在Python中,我们可以使用内置的函数和格式化选项来以十六进制形式打印输出。在本文中,我将向您介绍几种在Python中以十六进制打印输出的方法。自Python 3.6版本起,引入了f-string(格式化字符串字面值)的概念,它提供了一种更简洁和直观的方式来格式化字符串。我们可以使用f-string将一个整数转换为十六进制,并将其打印输出。我们可以使用这个函数将一个整数转换为十六进制,并将其打印输出。格式化选项将一个整数转换为十六进制,并将其打印输出。与方法一不同的是,这种方法没有前缀"0x"。 阅读详情

相关推荐

Java实现十六进制计算器工具项目

参数类型是否必填合法值范围说明sString是非 null包含合法十六进制字符的字符串,可选前导符号+/-radixint是2 ~ 36指定进制,16 表示十六进制允许开头有一个可选的或不允许连续多个符号(如++--+-符号后必须紧跟有效十六进制字符若符号位于字符串中部或末尾,则视为非法建议做法:在解析前统一标准化符号格式,例如强制去除所有前导符号后再单独判断符号意图。

weixin_34511754的博客 688

C语言printf输出十六进制16进制

#include <stdio.h> int main() { short a = 0b1010110; //二进制数字 int b = 02713; //八进制数字 long c = 0X1DAB83; //十六进制数字 printf("a=%ho, b=%o, c=%lo\n", a, b, c); //以八进制形似输出 printf("a=%hd, b=%d, c=%ld\n", a, b, c); //以十进制形式输出 .

纸带的博客 11万+

PCB设计AD规则设置(按照嘉立创设置)

按照嘉立创的相关加工能力进行设置: 1.Hole Size(钻孔孔径) 嘉立创要求钻孔孔径在0.2-6.3mm,并给了公差(如下图给出了钻孔孔径和公差) 规则设置位置:Manufacturing->Hole Size,这里就改一下数值,最小设置为0.2mm,最大设置为6.3mm 2.Width(线宽) 嘉立创要求线宽多层板双层板最小为3.5mil,单双层板最小为5mil(如下图给出了线宽) 规则设置位置:Routing->Width,我目前只画过双层板,按我的设置如下,最小的线宽设置为10

subtitle_的博客 4万+

c语言 - printf函数打印16进制格式数据

使用printf 输出16进制的格式化数据,例如输入 0x0A。这种方式对0x00无效,

-凌凌漆-的博客 1万+

Unity热更实战:用YooAsset+HybridCLR实现小游戏资源与代码双更新(含避坑清单)

本文详细介绍了Unity小游戏开发中如何通过YooAsset与HybridCLR实现资源与代码双热更新方案。内容涵盖环境配置、架构设计、微信小游戏专项优化、热更代码工程化实践及真机调试技巧,帮助开发者解决审核周期长、紧急修复等痛点,提升更新效率与稳定性。

weixin_42520025的博客 502

微信好友恢复全攻略(2025年3月更新)

适用于仅被拉黑场景(成功率100%)针对7天内误删场景(成功率78%)

2301_77933942的博客 1万+

spdlog c++日志打印框架

其实在这里还有一个问题,在我们看hex的时候,经常会看到是16个byte的行,那么我们如何去添加呢。可以看到后面有个16,这个就是每行的意思,意思每行16个;// {:a} - 如果未设置 :n,则显示ASCII。// {😒} - 不要在每个字节之间添加空格。// {:p} - 不要在每行开始时打印位置。// {:n} - 不要将输出分割成行。// 支持以十六进制格式记录二进制数据。// {:X} - 以大写字母打印。同时,这个xspn这些选项可以混用。原始的我们不做任何处理的情况下。

二进制科学的博客 4061

Win10管理员权限的‘暗门’:从mmc.exe被阻止,聊聊UAC与自动提权那些事儿

本文深入解析Windows 10中UAC(用户账户控制)与自动提权机制,探讨mmc.exe被阻止的深层原因及解决方案。从UAC工作原理到自动提权机制,再到具体诊断与修复步骤,帮助用户理解并解决权限管理问题,同时平衡安全性与便利性。

weixin_30521161的博客 419

printf十六进制格式打印

但是,这种方法并不能直接打印出负号,因为十六进制数本身是无符号的。所以,你需要先检查这个数是否小于0,如果是的话,再打印出负号和它的绝对值。函数的一个格式说明符,用于以十六进制形式打印整数,并且在打印的结果前面添加。在C语言中,如果你想打印一个负的十六进制数,你可以使用。是否小于0,如果是的话,就打印出负号,并将。是一个标志,表示在打印的结果前面添加。这样,你就可以看到输出是。,这是255的十六进制表示。表示以十六进制形式打印整数。函数中,它创建了一个变量。表示这是一个格式说明符,例如,如果你有一个整数。

我的博客 4761

js逆向第3例:蝉妈妈大屏实时数据formDataSign加密

蝉妈妈大屏抖音直播实时数据是抓取抖音直播间数据的实时数据,有类似需求的公司但没有能力去搞定抖音,抓取蝉妈妈数据也是一个不错的选择。接下来就是调试找到加密点,说句题外话蝉妈妈的所有js文件打包方式用的都是webpack5,那如何区分打包方式可以阅读这篇文章。时间戳 ,经过观察发现加密参数是实时变化的。这个函数扣下来,在浏览器控制台中测试一下。言归正传,打断点找到变量。继续打断点向上找又发现了。查看请求参数,可以看到。请求的内容,那么这个。

花臂不花Home 1540

基于C++和Qt开发IEC104规约主站调试软件(第二章)

本章节主要讲解iec104主站软件界面设计和从站的连接功能以及部分功能代码的展示。

半青年的博客 860

tcp服务器读取信息动态显示,TCP服务器收到16进制的数据包,如何读出来显示给用户查看...

字符和十六进制码的互换privatestringToUnicodeString(strings){StringBuildersb=newStringBuilder();byte[]bytes=Encoding.Unicode.GetBytes(s);for(inti=0;i{sb.Append("\\u");sb.Append(bytes[i+1].ToStri...

weixin_33100393的博客 652

Qt图形几何之QRect详解:从基础操作到高级功能全解析

本文全面介绍了Qt框架中的QRect类,详细解析了其核心功能和使用方法。主要内容包括:1)QRect的基本概念与多种构造函数;2)矩形属性获取和状态判断方法;3)几何操作函数(移动、调整大小等);4)几何关系判断(包含、相交等);5)坐标变换和边距处理;6)实用功能与QRectF转换;7)综合应用示例(图形界面、碰撞检测、布局管理);8)性能优化建议和常见陷阱。通过丰富的代码示例,展示了QRect在Qt图形编程中的实际应用,帮助开发者掌握矩形处理的各项操作技巧,提升图形界面开发效率。

专注现代C++实战,从核心语法到高性能编程,助力开发者深入掌握系统级编程精髓。 117

【C++】打印十六进制数据

说明 大家可能在做流媒体开发,或者网络相关开发的时候经常需要对数据进行逐个字节的分析,这个时候如果能在日志里面通过二进制,或者十六进制的方式打印出字节的详细内容,这样就能很方便的分析数据了。 这里有个很小的代码片段,可以完成这个功能 片段 std::string to_hex(unsigned char* data, int len) { std::stringstream ss; ss << std::uppercase << std::hex << s

PJZero 1万+

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

python十六进制字符串_Python | 在字符串中分配十六进制值并以字符串格式打印

python十六进制字符串To assign a hexadecimal value in the string so that it can be printed as a string, we use \x that is known as Escape sequence”, it represents that given value is the hexadecimal value. 为...

2869

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

按十六进制打印_UEFI开发探索51 – UEFI下的打印函数

(请保留->作者:罗冰 原始发布的博客地址:https://blog.youkuaiyun.com/luobing4365)原计划的50篇博客,终于完成了。可惜的是,现有的篇幅无法把最初设想的内容全部覆盖。因此,开发探索系列还会继续写下去,既然原定目标50篇已经达成,新的目标篇数就不设定了。只针对我感兴趣的各方面的内容,继续探索。在日常的开发中,总会用到各种打印(print)函数。UEFI下的打印函数,...

weixin_39638929的博客 522

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

C语言用十六进制的方式打印字符串(密文字符串打印查看)

密码算法处理后的数据D,如果使用普通的printf函数打印D,不能正确显示数据;其原因有1.ASCII编码的字符分为可显示字符和非可显示字符,2. 遇到00后会默认结束,等。所以要查看密文数据D,应该用十六进制的方式打印查看;其函数为PrintHex,具体如下。

super_SB的博客 1222

同时以十六进制和字符串方式打印缓冲区

本函数用于打印一个缓冲区的内容,一行里先以十六进制方式打印,再打印对应的字符串,中间以";"分隔。一行打印16个字节。     #define PRINT_LINE_WIDTH 16 void PrintChar(FILE*fp, char ch) { if(ch < 16) fprintf(fp, "%c", '.'); else fprintf(fp,

Hansel的专栏 4571

常用指令打印命令

1、设置字体大小 ESC ! n[名称] 设置字符打印方式[格式] ASCII码 ESC ! n十六进制码 1B 21 n十进制码 27 33 n[描述] ESC ! n是综合性的字符打印方式设置命令,用于选择打印字符的大小, n的默认值为0,即字符不放大。打印参数n的每位定义如下: 实例: string cmdFontBig = "" + (ch...

alili1991的博客 1493

C语言——格式化打印printf(常用整理)

前言:C语言中printf经常被用来输出各种调试信息,下面整理了它常用的格式化输出语句。 1.十六进制输出—%x   printf没有打印二进制数据的格式,只有打印十六进制数据的格式:%x   prrintf("output data:%x",data); ...

qq_36749906的博客 3204

用汇编实现二进制数和十六进制数的相互转换

用汇编实现二进制数向十六进制数的转换 一、实现功能 1)实现二进制数向十六进制数的转换 2)实现十六进制数向二进制数的转换‘ 二、设计分析       汇编语言中,字符在机器中都是以ascii码的二进制格式存储,但是汇编语言写的时候常用十六进制,因此需要好好看看ascii码的十六进制表。      特别是进制转换一定要注意,机器中存储的是数的二进制数本身,而我们输入输出的是数的ascii码的值,因此注意对寄存器中数的加减操作。   &nb

weixin_44194299的博客 1万+

常用数据类型打印格式

数据类型 打印格式 u8 (unsigned char) %d s8 (signed char) %d u16 (unsigned short) %d or %hu s16 (signed short) %d or %hd u32 (unsigned int) %u s32 (signed int) %d u64 (unsigned long lon...

|~~~热爱生活、努力学习的小伙汁~~~| 2611

C语言 -- 字符串和十六进制的相互转换方式

C语言的字符串操作并不像java,Csharp那样提供直接的方法,简单粗暴。所以,在转换的时候往往费力费时,近日做项目正好用到和java程序通讯,java发送过来的数据是十六进制数字组成的字符串,解析的时候颇费心思才算完成,所以,权在此做一笔记,方便以后查看,以及需要帮助的童鞋,当然,有问题欢迎随时交流,一同进步,欧耶!

青椒*^_^*凤爪爪的博客 6万+

0x十六进制和0八进制 十六进制和字节 位 二进制的关系

一、0x十六进制和0八进制 0x开头是16进制 英文:hexadecimal 简称HEX 0开头是8进制 英文: octal 简称OCT 八进制数是一种逢八进一的计数体制,基数是8,用0~7表示,如077。 八进制数以数字0开头。 十六进制数是一种逢十六进一的计数体制,基数是16,用09,AF表示,如0xFF或0XFF。 十六进制数以数字0和字母x的组合0x或0X开头。其中字母x是不区分大小写的,即0x与0X等价。 Note: 输出打印八进制数时 %o 这里是字母 o int a = 12

小目标 2万+

【实例】 以十六进制形式打印QString字符串

原文链接:https://www.fearlazy.com/index.php/post/312.html 十六进制形式可以更直观的看到数据的真实样子,有时候对于调试很有帮助。 不同的编码方式下QString的十六进制不同,如:GBK用两个字节来表示一个中文字符, 而utf-8用三或四个字节来表示一个中文字符。 QString可以借助QByteArray来实现十六进制形式输出,将QString转换为QByteArray打印。 例:字符串 "中文english" 以上3个以to开头的函

fearlazy 3727
MangoDec
博客等级 码龄15年 0粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值