精华内容
下载资源
问答
  • HxD 是一款免费的十六进制编码处理工具,它完全不逊于市面上任何一款付费使用的专业十六进制编辑工具,除了能够快速打开大容量的文件以及基本的十六进制编码处理外,它还具备了直接对内存内容进行编辑的功能(这一般...
  • winhex 十六进制文本编辑器,可以任意转换编码方式,支持十六进制,和edit++相比有独特的优势
  • 十六进制编辑器There are different types of editors used to change the context of the given file. Most of the computer users aware of text editors. But there are other less-known editors used by ...
    十六进制编辑器

    十六进制编辑器

    There are different types of editors used to change the context of the given file. Most of the computer users aware of text editors. But there are other less-known editors used by different professions. Hex editors are mainly used by reverse engineers, system administrators, application developers, etc.

    有多种类型的编辑器用于更改给定文件的上下文。 大多数计算机用户都知道文本编辑器。 但是,还有其他不太知名的不同行业的编辑器。 十六进制编辑器主要由反向工程师,系统管理员,应用程序开发人员等使用。

    什么是十六进制或十六进制编辑器? (What is Hex or Hexadecimal Editor?)

    Hex editors used to edit files where these files are generally structured in a hexadecimal format. The logic is the same as text files where they are structured in ASCII/text format. Hexadecimal numbering system like decimal where we use in our daily life.

    十六进制编辑器用于编辑文件,这些文件通常以十六进制格式组织。 其逻辑与以ASCII /文本格式组织的文本文件相同。 我们在日常生活中使用的十六进制编号系统(例如十进制)。

    免费十六进制编辑器(法语) (Free Hex Editor (frehed))

    Free Hex Editor is provided by HHD software. It is especially good in editing large files in hexadecimal mode. It is distributed in the freemium model and provides basic features for free. It allows you to find data patterns in multi-gigabyte files in seconds. Supports expression rich regular expressions. Easily create file patches just one click. The flexible user interface can easily be configured for your convenience. Supports multiple cores to make it exceedingly faster. Can be downloaded from the following link.

    HHD软件提供了免费的Hex编辑器。 在以十六进制模式编辑大型文件时特别有用。 它以免费增值模式分发,并免费提供基本功能。 它使您可以在几秒钟内找到多GB文件中的数据模式。 支持丰富的表达式正则表达式。 一键轻松创建文件补丁。 为方便起见,可以轻松配置灵活的用户界面。 支持多个内核,以使其速度更快。 可以从以下链接下载。

    http://www.hhdsoftware.com/Download/free-hex-editor-neo.exe

    http://www.hhdsoftware.com/Download/free-hex-editor-neo.exe

    Free Hex Editor (frehed)
    Free Hex Editor (frehed)
    免费十六进制编辑器(法语)

    高度 (HxD)

    HxD is developed by Mh-Nexus. HxD is a popular hex editor between reverse engineers. It has a rich feature set. It provides install-able and portable editions. It has the ability to edit RAM or main memory contents but as you expect it requires Administrator privileges. It can editor disk drives like hard disks, floppy disks, zip-disks, cd, etc. HxD has a flexible and fast search engine. Edited content can be exported in several data formats like Pascal, C, Java, C# source, Plain text, Hex files, etc.  HxD can provide basic data analytics or statistics about the hex file. HxD can be downloaded from the following link.

    HxD由Mh-Nexus开发。 HxD是反向工程师之间流行的十六进制编辑器。 它具有丰富的功能集。 它提供了可安装和便携式版本。 它具有编辑RAM或主存储器内容的功能,但是正如您期望的那样,它需要管理员权限。 它可以编辑硬盘,软盘,zip磁盘,cd等磁盘驱动器。HxD具有灵活而快速的搜索引擎。 可以以多种数据格式(例如Pascal,C,Java,C#源,纯文本,十六进制文件等)导出已编辑的内容。HxD可以提供有关十六进制文件的基本数据分析或统计信息。 可以从以下链接下载HxD。

    LEARN MORE  Linux od Command Tutorial With Examples To Dump Files Octal Number Format
    了解更多Linux od命令教程,并附带示例以转储文件八进制数字格式

    ftp://wa651f5:[email protected]/HxDSetupEN.zip

    ftp:// wa651f5: [受电子邮件保护] /HxDSetupEN.zip

    HxD
    HxD
    高度

    超编辑(UltraEdit)

    UltraEdit has a rich feature set like previous examples. It has also a shiny and modern look. UltraEdit support themes that will give different look to the hex editor. It supports multi-caret or multi-select where we can add the same characters into multiple places single type. Like other hex editors fast search. It supports integrated FTP, Ssh, Telnet connections, and remote files. It supports Windows, Mac, and Linux operating systems.  UltraEdit can be downloaded from the following link.

    UltraEdit具有与前面的示例类似的丰富功能。 它也具有闪亮和现代的外观。 UltraEdit支持主题将赋予十六进制编辑器不同的外观。 它支持多插入符号或多选,我们可以将相同的字符添加到单个类型的多个位置。 像其他十六进制编辑器一样,可以快速搜索。 它支持集成的FTP,Ssh,Telnet连接和远程文件。 它支持Windows,Mac和Linux操作系统。 可以从以下链接下载UltraEdit。

    https://downloads.ultraedit.com/main/ue/win/ue_english_64.exe

    https://downloads.ultraedit.com/main/ue/win/ue_english_64.exe

    UltraEdit
    UltraEdit
    超编辑

    ZTreeWin(ZTreeWin)

    ZTreeWin is a command-line or MS-DOS-based hex editor. It has fewer features than other hex editor but has the ability to work from the command line or MS-DOS. It supports Unicode applications. Enhanced color configuration. Extended status information about system and login. The history list for marked entries which has no limit.

    ZTreeWin是命令行或基于MS-DOS的十六进制编辑器。 它的功能少于其他十六进制编辑器,但具有从命令行或MS-DOS运行的能力。 它支持Unicode应用程序。 增强的色彩配置。 有关系统和登录的扩展状态信息。 标记条目的历史记录列表没有限制。

    ZTreeWin
    ZTreeWin
    ZTreeWin

    PSPad (PSPad)

    PSPad is a freeware text and code editor. It can edit multiple files at the same time. Ability to save current work in order to open later. Ftp client to edit remote files directly. Macro recorder which can record, save, and run macros. diff functionality with coloring. Syntax highlighting according to file type. RTF, HTML, TeX export capability. It has an installer and portable versions. PSPad can be downloaded from the following link.

    PSPad是一个免费软件,文本和代码编辑器。 它可以同时编辑多个文件。 保存当前工作以便以后打开的能力。 ftp客户端直接编辑远程文件。 宏记录器,可以记录,保存和运行宏。 差异功能与着色。 根据文件类型突出显示语法。 RTF,HTML,TeX导出功能。 它具有安装程序和便携式版本。 可以从以下链接下载PSPad。

    http://www.fosshub.com/PSPad.html

    http://www.fosshub.com/PSPad.html

    PSPad
    PSPad
    PSPad

    Notepad ++ Hexeditor插件 (Notepad++ Hexeditor Plugin)

    Notepad++ is actually a text editor but it has plugin that provides additional features. Hex editor plugin is one of them. Hex editor can be installed from Plugin -> Plugin Manager -> Show Plugin Manager-> Available .Notepadd++ provides simple features as Hex editor. We can view change the content of the current file.

    Notepad ++实际上是一个文本编辑器,但是它具有提供附加功能的插件。 十六进制编辑器插件就是其中之一。 十六进制编辑器可以从Plugin -> Plugin Manager -> Show Plugin Manager -> Available 。Notepadd++提供了一些简单的功能,如十六进制编辑器。 我们可以查看更改当前文件的内容。

    Notepad++ Hexeditor Plugin
    Notepad++ Hexeditor Plugin
    Notepad ++ Hexeditor插件

    HexEd.it(基于Web)(HexEd.it (Web Based))

    With the advancement of the web and internet most of the services, applications are provided web-based. HexEd.it is a web-based hex editor which provides very clean and simple GUI via the web browser. As you expect there is no need to install software to exit hex files. Just navigate to the https://hexed.it URL. As a web-based hex editor, it provides useful features about the display, date format, hex area settings, data type visibility, Address and text search, etc. As you expect in order to display and edit a file as hex you need to upload it with the Open file button. There is no fee about usage but you make a donation to this app or project via bitcoin or PayPal.

    随着Web和Internet的发展,大多数服务都基于Web提供了应用程序。 HexEd.it是一个基于Web的十六进制编辑器,可通过Web浏览器提供非常干净和简单的GUI。 如您所愿,无需安装软件即可退出十六进制文件。 只需导航到https://hexed.it URL。 作为基于Web的十六进制编辑器,它提供了有关显示,日期格式,十六进制区域设置,数据类型可见性,地址和文本搜索等的有用功能。如您所期望的,以十六进制显示和编辑文件时,您需要使用“打开文件”按钮上传。 使用不收取任何费用,但您可以通过比特币或PayPal向此应用或项目捐款。

    HexEd.it (Web Based)
    HexEd.it(基于Web)

    翻译自: https://www.poftut.com/best-free-hex-editors-windows/

    十六进制编辑器

    展开全文
  • 最好用的十六进制编辑器010 Editor

    千次阅读 2019-04-15 11:47:42
    010 Editormac破解版是mac上一款非常强大的十六进制编辑器,可以帮助用户进行编辑十六进制和二进制,可选择自己需要的进制进行编辑,还可对任何的文件进行编辑;软件内置了强大的模块、脚本操作,只需要用户将一个...

    010 Editor mac破解版是mac上一款非常强大的十六进制编辑器,可以帮助用户进行编辑十六进制和二进制,可选择自己需要的进制进行编辑,还可对任何的文件进行编辑;软件内置了强大的模块、脚本操作,只需要用户将一个类型的二进制文件进行定义模块,以后这您需要进行编辑相同类型文件的时候,即可调用以前的模块进行使用,分析文件,而且是自动的进行分析,轻松地编辑任何文件在您的计算机上的内容。

    010 Editor 破解版破解教程

    010 Editor 破解版镜像包下载完成后打开,将左侧的【010 Editor】拖到右侧的应用程序进行安装。

    点我下载安装~

    点击左上角about 010 Editor.如图:

    点击register.如图:

    弹出010 Editor注册界面,我们name中输入【orsoon】password随意输入【123】然后点击【check license】。

    010 Editor Mac版破解成功!

    010 Editor mac破解版官方介绍

    010 Editor是专业的文本编辑器和十六进制编辑器,能够编辑和解析任何二进制文件。上面的截图显示了010 Editor的主窗口。文件在中心区域显示为一系列文本字符或十六进制字节。010 Editor最强大的功能是能够将二进制文件解析为可以理解的数据结构。解析由二进制模板完成,如右上方所示,运行模板的结果显示在十六进制编辑器下面的“模板结果”面板中。

    010 Editor for Mac破解版功能介绍

    010 Editor:专业文字编辑器

    编辑文本文件,XML,HTML,Unicode和UTF-8文件,C / C ++源代码等。

    无限制的撤消和强大的编辑和脚本工具。

    巨大的文件支持(50 GB +)。

    010 Editor:世界上最好的十六进制编辑

    任何大小的文件都具有无与伦比的二进制编辑性能。

    使用强大的二进制模板技术来理解二进制数据。

    查找并修复硬盘驱动器,内存密钥,闪存驱动器,CD-ROM等问题。

    调查和修改进程的内存。

    二进制模板 - 十六进制编辑到一个新的水平

    为什么010 Editor如此强大?与仅显示文件(1)的原始十六进制字节的传统十六进制编辑器不同,010 Editor还可以使用二进制模板(2)将文件解析为层次结构。运行二进制模板的结果比仅使用原始十六进制字节更容易理解和编辑。

    二进制模板易于编写,看起来类似于C / C ++结构,除了它们可能包含if,for或while语句以及函数或复杂表达式。

    功能强大,几乎可以解析任何二进制文件格式。

    可以设置为在打开文件时自动运行。

    分析工具 - 深入了解您的数据

    010 Editor中包含许多复杂的工具,用于分析和编辑二进制文件:

    对于许多不同的数据类型,完全查找,替换,在文件中查找和替换文件功能。

    强大的二进制比较工具,用于分析两个文件之间的逐字节差异。

    使用直方图工具计算字节出现次数并可视化数据。

    计算校验和/哈希算法,包括CRC-16,CRC-32,Adler32,MD2,MD4,MD5,RIPEMD160,SHA-1,SHA-256,TIGER等。

    脚本 - 自动编辑

    可以使用类似于C / C ++的语法自动执行简单或复杂的编辑操作。

    具有300多种不同的功能,可用于数据操作。

    与二进制模板集成以直观地编辑文件。只需分配二进制模板中定义的变量即可修改文件。

    可以共享脚本,并在我们的脚本存档中提供可供下载的脚本列表。

    从命令行运行脚本,没有用于批处理的用户界面。

    .....还有更多。

    功能强大的工作区视图,包括文件浏览器

    在ASCII,EBCDIC,Unicode,UTF-8等之间转换数据。

    Inspector允许以不同格式快速解释数据。

    使用书签标记重要字节。

    完整的综合表达计算器

    应用突出显示规则以标识文件中的字节。

    以Intel Hex格式,Motorola S-Records,Hex Text,C / C ++ / Java Code,Base64,Uuencoding,RTF或HTML导入或导出数据。

    使用完整打印预览,页眉,页脚和页边距打印。

    010 Editor 9 mac破解版模版介绍

    二进制模板

    帮助您理解二进制数据

    编辑二进制数据很难。您必须确切地知道要在文件中编辑哪些字节,编辑错误的字节会导致文件无法使用。二进制模板允许您以 强大,直观的方式理解数据并对其进行编辑,从而揭开二进制数据的神秘面纱。

    右侧的图像显示在010 Editor中打开的ZIP文件。大多数十六进制编辑器只显示文件的原始十六进制字节(1),但是010 Editor通过将文件解析为分层数据结构以便于编辑来超越这个(2)。数据结构由一系列变量组成,并且在列表中选择一个变量显示哪个十六进制字节对应于该变量(在图像中,变量'frVersion'对应于十六进制字节'14 00')。

    010编辑器可以在打开文件时自动将二进制模板应用于文件。010 Editor中包含ZIP,BMP和WAV文件的二进制模板,我们的模板存档中还提供了一系列其他模板供下载。如果您使用自己的二进制格式,编写自己的二进制模板并不困难。

    编写二进制模板

    二进制模板看起来与C / C ++中的结构定义类似,但更灵活,因为它们可能包含if,for或 while语句以及函数或复杂表达式。模板作为程序执行,从文件的第一行开始。每当声明一个变量时,该变量就会映射到文件中的一组字节。然后,可以通过访问创建的变量来读取或写入来自该文件的数据。有关模板如何工作的示例,请参阅下一节。

    010 Editor包含对编辑和运行二进制模板的完全支持。集成的源代码编辑器提供语法突出显示(如左图所示)。

    注意:其他一些编辑器使用类似于C / C ++的结构提供结构查看器; 但是,这些查看器的功能不如二进制模板无法解析整个二进制文件。

    示例模板

    以下示例演示了一个简单的二进制模板。此模板设计用于包含一系列员工记录的二进制文件。

    在模板中定义变量时,该变量将映射到文件中的一组字节。在这种情况下,可变类型将被映射到的前四个字节的文件,版本将被映射到下四个字节, numRecords下两个字节等(见下面的图)。执行模板时,可以在声明任何变量后立即访问它们。这里file.header.version可用于从文件中读取数据,即使文件未完全定义。

    模板非常灵活,任何可能包含复杂表达式,包括任何常规C运算符,如+, - ,*,/,&,|,^,〜,%,++, - ,?:等。大量函数可用于修改模板的运行方式。

    编辑模板结果

    运行模板后,可以在“十六进制编辑器”下方或“检查器”的“ 变量”选项卡中显示的“ 模板结果”面板中访问模板中定义 的变量。模板结果显示了数据的完整分层视图,如左侧所示。从列表中选择变量时,将在主十六进制编辑器窗口中选择相应的十六进制字节。通过单击“值”字段,输入新值并按Enter键,可以编辑变量。

    从Template变量读取值的另一种方法是将鼠标光标放在Hex Editor窗口中的某些字节上。将显示一个提示弹出窗口,指示该位置的变量值。要查找哪个变量对应于某个字节位置,请将光标移动到该位置并按Ctrl + J(跳转到模板变量),010 Editor将在模板结果中找到该变量。

    使用脚本编辑

    编辑从模板生成的变量的另一种方法是使用脚本。脚本具有类似于C的语法,并以常规方式定义变量。例如,要将每个员工的工资加倍,可以使用以下脚本:

    脚本可以自动修改模板中定义的任何变量。与任何其他编辑操作一样,Scripts支持撤消和重做。

    高级功能

    010 Editor包含一些使模板更强大的附加功能。例如:

    使用local关键字在模板中定义常规C变量。

    应用颜色到模板变量,使他们在编辑器中脱颖而出(见的功能SetBackColor,SetForeColor,或为setColor的文档中)。

    该端可以在模板中进行切换,从而可以从同一个文件中读取大端或小端的数据(见大尾端或LittleEndian文档中的功能)。

    通过使用FSeek或FTell函数 在文件中移动,可以按任何顺序读取模板变量。

    通过编写特殊的读写函数来定义自己的自定义变量。该语法允许以几乎任何格式读取数据。

    可以从文件中读取数据,而无需使用函数ReadByte,ReadShort,ReadInt等声明Template变量。

    在变量声明后,使用语法 更改模板结果中显示的数据的格式。

    结构和联合都受支持,可用于定义递归数据类型。

    通过使用按需结构,可以编写包含数百万个变量的模板。

    展开全文
  • 十六进制解码 In 在 Easy String Encryption Using CryptoAPI in C++ I described how to encrypt text and recommended that the encrypted text be stored as a series of hexadecimal digits -- b...

    十六进制解码

    In

    Easy String Encryption Using CryptoAPI in C++ I described how to encrypt text and recommended that the encrypted text be stored as a series of hexadecimal digits -- because cyphertext may contain embedded NULLs or other characters that can cause processing problems. 在C ++中使用CryptoAPI进行简单的字符串加密我描述了如何加密文本,并建议将加密的文本存储为一系列十六进制数字-因为密文可能包含嵌入的NULL或其他可能导致处理问题的字符。

    Since then I've worked on an application in which large blocks of binary data must be encoded into hexadecimal rapidly, and when needed, decoded back to binary just as rapidly.  In the earlier article, I provided a sort of "throw-away" hex encoder/decoder, but I felt that I needed something that was more efficient for production work.

    从那时起,我就致力于一个应用程序,在该应用程序中,必须将大型二进制数据块快速编码为十六进制,并在需要时将其解码为二进制。 在较早的文章中,我提供了一种“扔掉”的十六进制编码器/解码器,但我觉得我需要对生产工作更加有效的东西。

    In this article, I'll explore some hex encode/decode options, including the one supported by the CryptoAPI, and at the end of the article, I'll present the ultra-fast functions that ended up in my production code.

    在本文中,我将探讨一些十六进制编码/解码选项,包括。在本文的结尾,我将介绍最终在生产代码中使用的超快速功能。

    Observe the ordering of characters in an ASCII Table The only real issue with hex encoding is that there is a gap between the 9 and the A.  Most of the complications come when dealing with that.

    观察ASCII表中字符的顺序十六进制编码的唯一真正问题是9A之间存在间隙。 大多数并发症是在处理这些问题时出现的。

    How to Encode to Hexadecimal

    如何编码为十六进制

    Your binary source byte is 8 bits.  Take the data 4 bits at a time (values 0-15).  If that value is 0-9, then just add '0' (0x30).  If the value is 10-15, then add 0x37 instead.  That gives you a hex digit ('0', '1',...,'9','A',..., 'F').  Output the resulting high hex digit followed by the low hex digit.

    您的二进制源字节为8位。 一次取4位数据(值0-15)。 如果该值为0-9,则只需添加“ 0”(0x30)。 如果值为10-15,则添加0x37。 这会给您一个十六进制数字(“ 0”,“ 1”,...,“ 9”,“ A”,...,“ F”)。 输出结果高位十六进制数字,然后输出低位十六进制数字。

    void ToHexManual( BYTE* pSrc, int nSrcLen, CString& sDest )
    {
    	sDest="";
    	for ( int j=0; j<nSrcLen; j++ ) {
    		BYTE b1= *pSrc >> 4;   // hi nybble
    		BYTE b2= *pSrc & 0x0f; // lo nybble
    		b1+='0'; if (b1>'9') b1 += 7;  // gap between '9' and 'A'
    		b2+='0'; if (b2>'9') b2 += 7;  
    		sDest += b1; 
    		sDest += b2; 
    		pSrc++;
    	}
    }
    
    void ToHexSlow( BYTE* pSrc, int nSrcLen, CString& sDest )
    {
    	sDest="";
    	for ( int j=0; j<nSrcLen; j++ ) {
    		sDest.AppendFormat( "%02x", int(*pSrc) );
    		pSrc++;
    	}
    }
    
    significant problem when the output is large.  Let me explain...

    Significant Problem with Long Strings

    长字符串的重大问题

    Each time you concatenate to an existing CString (or an STL string object), the code must check to see if that current allocation is large enough.  If not, it must allocate a new chunk that is larger, and copy the existing contents to that location before appending the new text.  Imagine how clumsy that gets when the string is about 1MB long!

    每次连接到现有CString(或STL字符串对象)时,代码都必须检查以查看当前分配是否足够大。 如果不是,它必须分配一个更大的新块,并在追加新文本之前将现有内容复制到该位置。 想象一下,当字符串长约1MB时,会变得多么笨拙!

    We'll look at the efficient version that avoids these problems in a minute.  

    我们将看一眼能避免这些问题的高效版本。

    How to Decode from Hexadecimal

    如何从十六进制解码

    Your textual source data is composed of pairs of hex digits, for instance "72" or "0F' or "D3".  Take  the first digit and subtract '0' (0x30).  If the result is greater than 9 (it's 'A','B',...,'F'), then subtract 7, resulting in a value between 0 and 15.  Do the same for the second digit.  Multiply the first by 16 and add it to the second.  Output the resulting 8-bit value.

    您的文本源数据由成对的十六进制数字组成,例如“ 72”或“ 0F”或“ D3”。取第一个数字并减去“ 0”(0x30)。如果结果大于9(则为“ A” ','B',...,'F'),然后减去7,得到一个介于0和15之间的值。对第二个数字进行相同的操作。将第一个数字乘以16,然后将其加到第二个数字。结果为8位值。

    void FromHexManual( LPCSTR pSrc, int nSrcLen, BYTE* pDest )
    {
    	for ( int j=0; j<nSrcLen; j+=2 ) {
    		BYTE b1= pSrc[j]   -'0'; if (b1>9) b1 -= 7;
    		BYTE b2= pSrc[j+1] -'0'; if (b2>9) b2 -= 7;
    		*pDest++ = (b1<<4) + b2;  // <<4 multiplies by 16
    	}
    }
    
    void FromHexSlow( LPCSTR pSrc, int nSrcLen, BYTE* pDest )
    {
    	char sTmp[3]="xx";
    	int n;
    	for ( int j=0; j<nSrcLen; j += 2 ) {
    		sTmp[0]= pSrc[0];
    		sTmp[1]= pSrc[1];
    		sscanf( sTmp, "%x", &n );
    		pSrc += 2;
    		*pDest++ = (BYTE)n;
    	}
    }
    

    The CryptoAPI Hex Conversion Functions

    CryptoAPI十六进制转换功能

    None of the above routines provided the kind of speed that I was hoping to achieve.   After some research, I found a couple of functions in the CryptoAPI toolkit that convert to and from hex:

    上述例程都没有提供我希望达到的速度。 经过一番研究,我在CryptoAPI工具箱中发现了一些可与十六进制转换的函数:

       CryptBinaryToString  and  CryptStringToBinary

    CryptBinaryToStringCryptStringToBinary

    and I tried them:

    我尝试了它们:

    #pragma comment( lib, "Crypt32.lib" )
    #include <Wincrypt.h>
    void ToHexCryptoAPI( BYTE* pSrc, int nSrcLen, CString& sDest )
    {
        DWORD nOutLen= (nSrcLen*3)+4; // xx<space> + etc/
        char* pBuf= new char[nOutLen];
        BOOL fRet= CryptBinaryToString( pSrc,nSrcLen, CRYPT_STRING_HEX, pBuf, &nOutLen ); 
        sDest= pBuf;
        delete pBuf;
    }
    int FromHexCryptoAPI( LPCSTR pSrc, int nSrcLen, BYTE* pDest )
    {
        DWORD nOutLen= nSrcLen/2;
        BOOL fRet= CryptStringToBinary( pSrc, nSrcLen, CRYPT_STRING_HEX, pDest, &nOutLen, 0, 0);
        return( (int)nOutLen );
    }
    

    CryptBinaryToString appears to be formatted for screen output -- spaces between each pair of hex digits, embedded tab characters, CRLF at the end, etc.  The two functions above do work, and there certainly is value in using standard API functions, but the performance was lackluster, and I didn't want the overhead of the extra embedded characters.

    CryptBinaryToString似乎是为屏幕输出设置的格式-每对十六进制数字之间的空格,嵌入的制表符,末尾的CRLF等。上面的两个函数

    [step="" title="Finally --  The Ultra-Fast Code I Promised!"][/step]Lookup Tables Rather Than Calculations

    [step =“” title =“最后-我承诺的超快速代码!”] [/ step] 查找表而不是计算表

    If you look at the assembly-language output from any of the above routines, you will see conditional jumps and a significant number of calculations.   Modern processors are fast, using multiple pipelines to handle conditionals, but there is nothing faster than using a lookup table -- especially when the table is in L1 processor cache... the table access is nearly as fast as register access!

    如果您查看以上任何例程的汇编语言输出,您将看到条件跳转和大量计算。 现代处理器速度很快,使用多个管道来处理条件,但是比使用查找表更快的速度了-尤其是当该表位于L1处理器高速缓存中时...表访问几乎与寄存器访问一样快!

    So...

    所以...

    For binary-to-hex, I used a table that contains all possible output values for any byte of data.  This is very straightforward -- the data itself is the index into the table.  I use a WORD pointer to grab 16 bits (two hex digits) at a time.

    对于二进制到十六进制 ,我使用了一个表,其中包含任何数据字节的所有可能的输出值。 这非常简单-数据本身就是表的索引。 我使用WORD指针一次抓取16位(两个十六进制数字)。

    For hex-to-binary, I realized that I could use a lookup table that contains all possible hexadecimal digit values.   Rather than compensate for the "gap" between '9'' and 'A', I just left empty spots in the table.   As a bonus, I left an extra gap between "F" and "a" -- so that the same routine could convert the hexadecimal data regardless of whether it contains A,B,C,D,E,F or a,b,c,d,e,f.

    对于十六进制到二进制 ,我意识到我可以使用包含所有可能的十六进制数字值的查找表。 我没有补偿“ 9”和“ A”之间的“差距”,而是在表中留了空白点。 另外,我在“ F”和“ a”之间留了一个额外的空格-以便同一例程可以转换十六进制数据,而不管它是否包含A,B,C,D,E,F或a,b, c,d,e,f

    BYTE HexLookup[513]= {
    	"000102030405060708090a0b0c0d0e0f"
    	"101112131415161718191a1b1c1d1e1f"
    	"202122232425262728292a2b2c2d2e2f"
    	"303132333435363738393a3b3c3d3e3f"
    	"404142434445464748494a4b4c4d4e4f"
    	"505152535455565758595a5b5c5d5e5f"
    	"606162636465666768696a6b6c6d6e6f"
    	"707172737475767778797a7b7c7d7e7f"
    	"808182838485868788898a8b8c8d8e8f"
    	"909192939495969798999a9b9c9d9e9f"
    	"a0a1a2a3a4a5a6a7a8a9aaabacadaeaf"
    	"b0b1b2b3b4b5b6b7b8b9babbbcbdbebf"
    	"c0c1c2c3c4c5c6c7c8c9cacbcccdcecf"
    	"d0d1d2d3d4d5d6d7d8d9dadbdcdddedf"
    	"e0e1e2e3e4e5e6e7e8e9eaebecedeeef"
    	"f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff"
    };
    void ToHex( BYTE* pSrc, int nSrcLen, CString& sDest )
    {
    	WORD* pwHex=  (WORD*)HexLookup;
    	WORD* pwDest= (WORD*)sDest.GetBuffer((nSrcLen*2)+1);
    
    	for (int j=0; j<nSrcLen; j++ ) {
    		*pwDest= pwHex[*pSrc];
    		pwDest++; pSrc++;
    	}
    	*((BYTE*)pwDest)= 0;  // terminate the string
    	sDest.ReleaseBuffer((nSrcLen*2)+1);
    }
    
    BYTE DecLookup[] = {
    	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // gap before first hex digit
    	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 
    	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 
    	0,1,2,3,4,5,6,7,8,9,       // 0123456789
    	0,0,0,0,0,0,0,             // :;<=>?@ (gap)
    	10,11,12,13,14,15,         // ABCDEF 
    	0,0,0,0,0,0,0,0,0,0,0,0,0, // GHIJKLMNOPQRS (gap)
    	0,0,0,0,0,0,0,0,0,0,0,0,0, // TUVWXYZ[/]^_` (gap)
    	10,11,12,13,14,15          // abcdef 
    };
    void FromHex( BYTE* pSrc, int nSrcLen, BYTE* pDest )
    {
    	for (int j=0; j<nSrcLen; j += 2 ) {
    		int d =  DecLookup[*pSrc++ ] << 4;
    		    d |= DecLookup[*pSrc++ ];
    		*pDest++ = (BYTE)d;
    	}
    }
    

    Notes:

    笔记:

    In the final (ultra-fast)

    决赛(超快)

    ToHex function, note the usage of ToHex函数,请注意 s.GetBuffer() and s.GetBuffer()s.ReleaseBuffer().  The function allocates the entire output buffer before it starts.  This avoids that s.ReleaseBuffer()的用法。 该函数在启动之前分配整个输出缓冲区。 这样可以避免前面提到的 Significant Problem with Long Strings that I mentioned earlier.  I could have allocated a separate buffer and set the result string to it as a final step, but that's one (possibly large) memory copy that I wanted to avoid.  By using GetBuffer, I allocate and "freeze" the CString buffer while I'm filling it using high-speed pointer operations.

    All of the above functions would be safer if they had some error handling.  For instance, the FromHex functions all assume that the output buffer is large enough to hold the resulting binary data.  I omitted that but you might want to be more careful.  Note the technique used in the CryptoAPI functions, and emulate what Microsoft has done.

    如果上述所有功能都进行了一些错误处理,它们将更加安全。 例如,FromHex函数全部假定输出缓冲区足够大,可以容纳生成的二进制数据。 我忽略了这一点,但您可能需要更加小心。 请注意CryptoAPI函数中使用的技术,并模拟Microsoft所做的事情。

    Also, none of the FromHex

    另外,FromHex都不

    Xxxx routines take any special action when encountering an invalid hex digit; in fact, the fastest one may fail with an access violation if it indexes beyond the end of the lookup table.  In my case (and to avoid complicating this article) I assumed that I'd always have valid hexadeximal data.  You may not want to make that assumption.

    The ToHexManual, ToHexSlow, FromHexManual, and FromHexSlow all assume that the letter digits are uppercase (ABCDEF). The FromHex

    ToHexManual,ToHexSlow,FromHexManual和FromHexSlow均假定字母数字为大写(ABCDEF)。 FromHex

    如果找到小写的十六进制数字,则它们的 Xxxx versions of these will fail if lowercase hex digits are found.  The CryptoAPI functions use lowercase.

    The ToHex (fast) function generates lowercase letter-digits (abcdef) and FromHex (fast) will work with either uppercase or lowercase.  If you want uppercase output from ToHex, you can select the entire table in Visual Stuido, then use Edit/Advanced/Make Uppercase (If you want the option of using either, just create two tables).

    ToHex(快速)功能生成小写字母数字(abcdef),FromHex(快速)将使用大写或小写字母。 如果要从ToHex输出大写字母,可以在Visual Stuido中选择整个表,然后使用“编辑/高级/制作大写字母”(如果要选择使用其中一个,只需创建两个表)。

    The timing test results are interesting.   I read in a large (1MB) binary file (a ZIP file), then started the timer and ran 10 iterations of each function. Approx Ratio Debug Release (Release) ToHexManual 22,297 20,985 446 : 1 ToHexSlow 34,016 37,891 806 : 1 ToHexCryptoAPI 3,981 4,056 86 : 1 ToHex (fast) 172 47 1 : 1 FromHexManual 110 70 1.6 : 1 FromHexSlow 11,457 2,360 52 : 1 FromHexCryptoAPI 500 500 11 : 1 FromHex (fast) 47 45 1 : 1All times are in milliseconds, based on the less-than-precise GetTickCount() function.   I also ran a 100-iteration test on each to verify and got similar performance ratios.  The really big numbers for ToHexManual and ToHexSlow are almost certainly caused, at least in part, by the

    Significant Problem with Long Strings issue (which they both use).  

    The FromHexManual speed was faster than I thought it would be.  Upon examining the compiler-generated ASM source code, I found that the compiler had "inlined" the function.  Also, it seems that the calculate-and-jump-conditionally sequence is handled very efficiently on my AMD-based PC -- it's only about 50% slower than the lookup-table technique.


    In any case, the lookup-table versions proved to be significantly faster than the others.

    时序测试结果很有趣。 我读了一个大(1MB)二进制文件(一个ZIP文件),然后启动了计时器并为每个函数运行了10次迭代。 近似比率调试版本(发布)ToHexManual 22,297 20,985 446:1 ToHexSlow 34,016 37,891 806:1 ToHexCryptoAPI 3,981 4,056 86:1 ToHex(快速)172 47 1:1 FromHexManual 110 70 1.6:1 FromHexSlow 11,457 2,360 52:1 FromHexCryptoAPI 500 :1 FromHex(快速)47 45 1:1所有时间均以毫秒为单位,基于精确度不到的GetTickCount()函数。 我还对每个对象进行了100次迭代测试,以验证并获得相似的性能比。 几乎可以肯定,ToHexManual和ToHexSlow的真正大数字至少部分是由


    FromHexManual的速度比我想象的要快。 检查编译器生成的ASM源代码后,我发现编译器已“内联”了该函数。 另外,似乎计算和跳转条件 在基于AMD的PC上,onally序列的处理效率很高-仅比查找表技术慢50%。


    无论如何,事实证明查找表版本比其他版本要快得多。

    [i]References:[/i]

    [i] 参考:[/ i]

    CryptBinaryToString Function

    CryptBinaryToString函数

    http://msdn.microsoft.com/en-us/library/aa379887(VS.85).aspx http://msdn.microsoft.com/zh-CN/library/aa379887(VS.85).aspx

    CryptStringToBinary Function

    CryptStringToBinary函数

    http://msdn.microsoft.com/en-us/library/aa380285(VS.85).aspx http://msdn.microsoft.com/zh-CN/library/aa380285(VS.85).aspx

    How fast is your ASM hex converter?

    您的ASM十六进制转换器有多快?

    https://www.experts-exchange.com/Programming/Languages/Assembly/Q_20272901.html https://www.experts-exchange.com/Programming/Languages/Assembly/Q_20272901.html

    This Experts-Exchange "question" was really a challenge to create a particular kind of hexadecimal output in intel ASM.  The lookup table technique won out easily... until some smarty pants!!! figured out how to use MMX opcodes and handle larger chunks of data.   Interesting reading, and a lot of fun for the participants!

    在Intel ASM中创建特定类型的十六进制输出确实是一个专家交流的“问题”。 查找表技术很容易胜出...直到有些

    =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

    =-=-=-=-=-=-=-=-=-=-=-=-=- =-=-=-=-=- =-=-=-=-=- =-=-=-=-=- =-=-=-=-=- =-=-=-=-=- =-=-=-=

    If you liked this article and want to see more from this author,  please click the Yes button near the:

    如果您喜欢这篇文章,并希望从该作者那里获得更多信息请单击旁边的按钮:

          Was this article helpful?

    本文是否有帮助?

    label that is just below and to the right of this text.   Thanks!

    此文字下方和右侧的标签。

    =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

    =-=-=-=-=-=-=-=-=-=-=-=-=- =-=-=-=-=- =-=-=-=-=- =-=-=-=-=- =-=-=-=-=- =-=-=-=-=- =-=-=-=

    翻译自: https://www.experts-exchange.com/articles/1290/Fast-Hexadecimal-Encode-and-Decode.html

    十六进制解码

    展开全文
  • 写程序时我们经常遇到进制转换的问题,最常见的就是十进制和十六进制之间的转换,这篇就记录一下如何从十进制转换为十六进制。 十进制转十六进制字符串输出 char *itoa(int value,char*str,int base) 使用itoa...

    写程序时我们经常遇到进制转换的问题,最常见的就是十进制和十六进制之间的转换,这篇就记录一下如何从十进制转换为十六进制。

    十进制转十六进制字符串输出

    char *itoa(int value,char*str,int base)

    使用itoa(int value,char*str,int base)函数,value表示需要被转换的数,str表示转换完成后存储结果的目标位置,base表示进制数。例如,我们要将一个十进制数a转换为十六进制字符串,则:

    char*buffer[33];
    
    char*int_hex(int a)
    
    {
    
    itoa (a,buffer,16);
    
    return buffer;
    
    }

     

    但是,这个函数并非一个标准库函数,所以有些编译器在编译时可能会因不支持该函数而报错。

    sprintf(str,”%x”,value)

    使用sprintf(str,”%x”,value)函数格式化输出十六进制字符串,str表示转换后存储的目标位置,%x表示转换为十六进制,value表示需要被转换的数。这个函数可以完美替换itoa()函数。

    例如我们要将一个十进制数a转换为十六进制字符串输出,则:

    char buffer[33];
    char*int_hex(int a)
    {
    sprintf(buffer,”%x”,a);
    return buffer;
    }
    

    sprintf()和printf()的用法类似,以%开始,后面的字符为格式限定符,部分格式限定符如下表:

    %%打印百分比符号
    %c转换成ASCII
    %d转换成十进制
    %f转换成浮点数
    %o转换成八进制
    %s转换成字符串
    %x转换成小写十六进制
    %X

    转换成大写十六进制

    以上两种方法都是将十进制数转换成十六进制字符串输出,但有时我们需要的是十六进制数,也就是我们需要将十进制数转换后以十六进制数的形式输出,高级的办法我没有,只会一种最基础最直接的转换方法,十进制转换为十六进制的根本就是十进制数不断除以16取余,直至最后。

    unsigned char hex[16]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f};
    void int_hex(void)
    {
    signed int a,b,c,d,e,f,h;
    a=num%16;
    b=(num/16)%16;
    c=((num/16)/16)%16;
    d=(((num/16)/16)/16)%16;
    e=(((hex[d]&0xff)<<4)|0x0f)&(hex[c]|0xf0);
    f=(((hex[b]&0xff)<<4)|0x0f)&(hex[a]|0xf0);
    e=(e&0xffff)<<8;
    f=f|0xff00;
    h=e&f;
    }
    

     按照上面的函数算,最后我们的是h就是一个两个字节的十六进制数了。

    以上就是十进制转换为十六进制的各种常用方法了。

    展开全文
  • 十六进制、二进制转换以及练习

    千次阅读 2021-06-04 16:01:01
    现代计算机存储和处理的信息以二值信号表示,二值信号能够很容易地被表示、存储和传输。 虚拟存储器:被视为字节数组,按字节(一个字节由8位组成。在二进制表示法中,它的值域是0000000〜11111111;...十六进制.
  • 负数的十六进制表示 刚开始没多思考,不知道如何表示负数。 原码 反码 补码  在计算机中,数据是以补码的形式存储的。 正数的原码,补码,反码都相同,都等于它本身 负数的补码是:符号位为1,其余各位求反,末位...
  • C语言中的二进制、八进制和十六进制的表示

    千次阅读 多人点赞 2020-02-18 17:21:04
    二进制数、八进制数和十六进制数的表示 一个数字默认就是十进制的,表示一个十进制数字不需要任何特殊的格式。但是,表示一个二进制、八进制或者十六进制数字就不一样了,为了和十进制数字区分开来,必须采用某种...
  • 开源最前线(ID:OpenSourceTop) 猿妹整编综合自:https://github.com/WerWolv/ImHex十六进制编辑器,用来以16进制视图进行文本编辑的编辑工具软...
  • 代码功能:输入一个十进制整数,将其转化为十六进制整数并输出 二.源码 #include<iostream> #include<cstring> #include<cmath> using namespace std; // 十进制数转化为十六进制数步骤...
  • C-shellcode 到十六进制转换器。 在 gdb、windbg、radare2、ollydbg、x64dbg、immunity debugger 和 010 编辑器中粘贴和执行 shellcode 的便捷工具。 您在将 C-shellcode 转换为 HEX 时遇到问题(可能是 c-...
  • 文章目录一、二进制、八进制、十六进制整数的书写1、二进制2、八进制3、十六进制4、需要注意的坑二、二进制、八进制、十六进制整数的输出四、版权声明 整数是我们生活中常用的数据类型,也是编程中常用的一种数据,...
  • 以文件为例: QByteArray data = file.readAll(); QString ret; for (int i = 0; i < data.count(); ++i) { ret.append( tr("0x%1,").arg ((quint8)data.at(i),2,16,QLatin1Char('0')).toUpper());...
  • 这一篇文章要探讨的是“如何用算法实现十进制转十六进制”并不涉及什么特别的知识点。属于C语言基础篇。 在翻找素材的时候,发现一篇以前写的挺有意思的代码,这篇代码里面涉及的知识点没有什么好讲的,也没有什么...
  • C语言十六进制转换为八进制

    千次阅读 2019-01-31 23:16:09
     给定n个十六进制正整数,输出它们对应的八进制数。 输入格式  输入的第一行为一个正整数n (1&lt;=n&lt;=10)。  接下来n行,每行一个由09、大写字母AF组成的字符串,表示要转换的十六进制正整数,每个...
  • 问题描述 给定n个十六进制正整数,输出它们对应的八进制数。 输入格式  输入的第一行为一个正整数n (1<=n<=10)。  接下来n行,每行一个由09、大写字母AF组成的字符串,表示要转换的十六进制正整数,每个...
  • 点击上方蓝字可直接关注!方便下次阅读。如果对你有帮助,麻烦点个在看或点个赞,感谢~工作与写公众号的时间仍在平衡中......今天和大家分享一个十六进制文本转成十六进制字符并存储到二进制...
  • 引言 在撸代码的过程中,难免会遇到字符串转数字,今天在这里给大家分享三种字符串转数字的方法。 1、stringstream stringstream在头文件<...stringstream能完成十六进制和十进制的字符串的转换...
  • 十六进制转ASCII码

    万次阅读 2019-04-04 21:03:16
    芯片传回来的数据是以十六进制表示的,但是我想要把这十六进制代表的数据通过UART发送到电脑上表示出来,所以最终要求就是将十六进制表示的数据用ASCII码表示传给电脑。 但是所用的单片机又调不出sprintf函数… ...
  • 十六进制字符数组转变为字符串

    万次阅读 2019-02-10 16:33:38
    * 功能:将一个十六进制字节串转换成ASCII码表示的十六进制字符串 * 输入参数:pHex----十六进制数字节串首地址 * pAscii---转换后ASCII码表示的十六进制字符串首地址 * nLen---要转换的十六进制数长度(字节...
  • STM32 十进制转换成十六进制的实现(有例程),在Keil5里面用C语言实现,不用scanf函数 我看了很多十进制转换十六进制的文章,几乎全部都是利用scanf()函数写的,这和我想实现的功能并不一样,于是我打算自己写一...
  • 十六进制转十进制(C语言实现)

    千次阅读 2018-01-29 14:40:17
    首先,了解如何将字符串转化为十进制数: 从数字组成的字符串转化为十进制数步骤如下: 1、挨个读取数组,从第0位开始 2、将字符转化为数字。比如从'1'转化为1。可以参考ASCII码表,字符'0'是48,所以只需要将字符...
  • 16进制转换工具.7z

    2020-07-23 13:37:40
    超好用的16进制与ASCILL互转工具,16进制与浮点数互转工具。
  • char数组和十六进制格式化sprintf

    万次阅读 2018-11-27 16:28:22
    char ch[2]; sprintf(ch, "%x", 100); printf("字符串%%s输出:%s\n", ch); printf("字符%%c输出ch:%c\n", ch); printf("...十六进制%%x输出ch:%x\n",
  • 16进制文件编辑器

    2013-08-16 14:44:25
    之前看到都是不好用的,给大家分享一下吧 挺好用的,,,
  • 在c语言中,八进制,十六进制的全称是八进制整数和十六进制整数。所以虽然在数学中存在01.1,0x1.1的写法,但在c语言中是不可以的。(从百度中总结得来)只有整数可以用八进制,十六进制表示,浮点数不可以 但是c99...
  • 问题解析 0~9开头的不用加,A~F开头的要加 主要是汇编语言编译器的设计...十六进制以A~F打头的数字出现在指令中时,前面一定要加一个数字0,以免与其它符号相混淆。 参考文章 https://bbs.csdn.net/topics/3...
  • 首先来一篇好文:C语言中的二进制数、八进制数和十六进制数 C语言中的整数除了可以使用十进制,还可以使用二进制、八进制和十六进制。 二进制数、八进制数和十六进制数的表示 一个数字默认就是十进制的,表示一个十...
  • c 十进制数转十六进制

    万次阅读 2017-11-24 21:16:36
    str是转化存储的位置,%x表示十六进制格式,value是要转化的数字。所以代码可以为: char   buffer [33];  //用于存放转换好的十六进制字符串,可根据需要定义长度   ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 39,396
精华内容 15,758
关键字:

十六进制编译器