所谓的十六进制编辑器,就是把用十六进制的方式打开一个文件,其中读进来的每个字节被做为两个十六进制数看待,例如:
读入字节: 01101010; 分解成前后两个16进制数,每四个一组,就成了: 0110 1010 --> 6 A。
所以首先我们需要把文件做为字节流读入:
File file = new File(filePath);
BufferedInputStream in = new BufferedInputStream(new FileInputStream(file));
byte[] a = new byte[1024];
int count = -1;
StringBuilder sb = new StringBuilder();
while ((count = in.read(a)) != -1) {
//TODO
}
in.close();
以上每次读入一个字节块,并存入数组a中。下面要做的就是把读入的每个字节都分解成两个16进制数,因此我们仅仅需要关心字节的最后8位,并分别提取出前四位和后四位,最后组合成一个16进制数即可。
提取和组合的方法相当简单,如下:
private static void convertByte2Hex(byte b, StringBuilder sb) {
int number = b & 0x00ff;
if(number<16){
sb.append(0);
}
sb.append(Integer.toHexString(number));
}
有了这个方法,上面代码的//TODO部分就可以完成了:
for (int i = 0; i < count; i++) {
convertByte2Hex(a[i], sb);
}
这样,一个文件的16进制表示就完成。例如:
package test;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
System.out.println("HelloWorld!");
}
}
以上类编译后生成的class文件的16进制表示为:
CA FE BA BE 00 00 00 31 00 22 07 00 02 01 00 09
74 65 73 74 2F 54 65 73 74 07 00 04 01 00 10 6A
61 76 61 2F 6C 61 6E 67 2F 4F 62 6A 65 63 74 01
00 06 3C 69 6E 69 74 3E 01 00 03 28 29 56 01 00
04 43 6F 64 65 0A 00 03 00 09 0C 00 05 00 06 01
00 0F 4C 69 6E 65 4E 75 6D 62 65 72 54 61 62 6C
65 01 00 12 4C 6F 63 61 6C 56 61 72 69 61 62 6C
65 54 61 62 6C 65 01 00 04 74 68 69 73 01 00 0B
4C 74 65 73 74 2F 54 65 73 74 3B 01 00 04 6D 61
69 6E 01 00 16 28 5B 4C 6A 61 76 61 2F 6C 61 6E
67 2F 53 74 72 69 6E 67 3B 29 56 09 00 11 00 13
07 00 12 01 00 10 6A 61 76 61 2F 6C 61 6E 67 2F
53 79 73 74 65 6D 0C 00 14 00 15 01 00 03 6F 75
74 01 00 15 4C 6A 61 76 61 2F 69 6F 2F 50 72 69
6E 74 53 74 72 65 61 6D 3B 08 00 17 01 00 0B 48
65 6C 6C 6F 57 6F 72 6C 64 21 0A 00 19 00 1B 07
00 1A 01 00 13 6A 61 76 61 2F 69 6F 2F 50 72 69
6E 74 53 74 72 65 61 6D 0C 00 1C 00 1D 01 00 07
70 72 69 6E 74 6C 6E 01 00 15 28 4C 6A 61 76 61
2F 6C 61 6E 67 2F 53 74 72 69 6E 67 3B 29 56 01
00 04 61 72 67 73 01 00 13 5B 4C 6A 61 76 61 2F
6C 61 6E 67 2F 53 74 72 69 6E 67 3B 01 00 0A 53
6F 75 72 63 65 46 69 6C 65 01 00 09 54 65 73 74
2E 6A 61 76 61 00 21 00 01 00 03 00 00 00 00 00
02 00 01 00 05 00 06 00 01 00 07 00 00 00 2F 00
01 00 01 00 00 00 05 2A B7 00 08 B1 00 00 00 02
00 0A 00 00 00 06 00 01 00 00 00 03 00 0B 00 00
00 0C 00 01 00 00 00 05 00 0C 00 0D 00 00 00 09
00 0E 00 0F 00 01 00 07 00 00 00 37 00 02 00 01
00 00 00 09 B2 00 10 12 16 B6 00 18 B1 00 00 00
02 00 0A 00 00 00 0A 00 02 00 00 00 09 00 08 00
0B 00 0B 00 00 00 0C 00 01 00 00 00 09 00 1E 00
1F 00 00 00 01 00 20 00 00 00 02 00 21
多试几个class,就可以发现其实开头的8个字节都是一样的,这个是描述类文件的版本的。
如果有了16进制表示,要还原来内容,用ASCII码来表示内容。我们就需要再还原出每个字节,然后把字节对应的转换成对应的字符。
假如我们有一串已经是16进制表示的字符串。根据上面的原则,每两上16进制为一组表示一个字节的内容:
public static String convertHex2ASCII(String hexString) {
int length = hexString.length();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < length - 1; i += 2) {
String s = hexString.charAt(i) + "" + hexString.charAt(i + 1);
int parseInt = Integer.parseInt(s, 16);
if (parseInt < 32 && parseInt != 10) {
sb.append(" ");
} else {
sb.append((char) parseInt);
}
}
return sb.toString();
}
因为在ASCII码表中,32以下的字符都是一些不可表示字符,所以用空格代替了。
分享到:
相关推荐
4. "十六进制编辑器程序源代码":这是核心文件,包含实现十六进制编辑器功能的全部源代码。 从这个主题中,我们可以深入学习以下几个IT知识点: 1. **二进制数据处理**:理解如何在程序中表示和操作二进制数据,...
基于 QT 编写的十六进制编辑器,采用 C++ 进行开发,提供强大而免费的十六进制编辑器。该项目终极目标是实现一个功能强大、轻量级且跨平台(只针对 PC 平台)的十六进制编辑器。
ImHex是一款功能强大的十六进制编辑器,该工具专为逆向工程分析师、编程开发人员以及那些想好好保护自己眼睛的安全人员所设计。 功能丰富的十六进制数据界面:字节修复、修复管理、字节拷贝(字节、十六进制字符串...
8. **调试和分析工具**:在开发和调试过程中,程序员经常使用十六进制查看器或十六进制编辑器来检查二进制文件或内存内容,如使用十六进制转换工具可以方便地分析和理解数据。 9. **网络通信**:在TCP/IP协议栈中,...
在Java程序中,键盘键值表可以用于实现各种功能,例如,文本编辑器中的快捷键、游戏中的操作键等。 此外,键盘键值表还可以与ASCII码结合使用,以便于实现字符串的处理。例如,使用ASCII码,可以将字符串转换为十六...
【标题】"jhexedit:Java十六进制编辑器"是一个基于Java的十六进制编辑工具,它由Swing库构建,提供了丰富的功能,让用户能够查看和编辑二进制文件的十六进制表示形式。这款编辑器的独特之处在于,不仅可以作为独立的...
HxD是一款免费的十六进制编码处理工具,它完全不逊于市面上任何一款付费使用的专业十六进制编辑工具,除了能够快速打开大容量的文件以及基本的十六进制编码处理外,它还具备了直接对内存内容进行编辑的功能(这一般...
总的来说,Notepad++ 5.4.5不仅是一个高效的文本编辑器,更因其内置的十六进制编辑功能,成为了IT专业人士不可或缺的工具之一。通过下载并安装npp.5.4.5.Installer.exe,用户将能够体验到这一强大功能,并在实际工作...
功能丰富的十六进制数据界面:字节修复、修复管理、字节拷贝(字节、十六进制字符串、C、C++、C#、Rust、Python、Java和JavaScript数组、HTML自包含div等)。字符串、十六进制搜索。自定义C++类模式语言,支持对文件...
ImHex 是一个为逆向工程师、程序员和在凌晨 3 点工作时重视其视网膜的人提供的十六进制编辑器
在读java编译后.class文件的时候可以用来查看16进制数据; winhex 是一个专门用来对付各种日常紧急情况的...总体来说是一款非常不错的 16 进制编辑器。得到 ZDNetSoftwareLibrary 五星级最高评价,拥有强大的系统效用。
WinHex是一款著名的16进制编辑器,它允许用户查看、编辑和操作二进制文件以及内存中的十六进制数据。 首先,我们需要理解16进制(Hexadecimal)是计算机科学中常用的一种数值表示方式,它基于16个符号(0-9 和 A-F...
HxD-16进制编辑器是一款可以在电脑上运行的免费十六进制编码处理工具,支持64位操作系统,它完全不逊于市面上任何一款付费使用的专业十六进制编辑工具,能够快速打开大容量的文件以及基本的十六进制编码处理,需要此...
3. 在实际应用中的例子,比如网络通信中数据的编码和解码,或者在文本编辑器中查看字符的二进制和十六进制表示。 4. 与ASCII相关的其他编码系统,如Unicode(包括UTF-8)和ISO 8859等,以及它们与ASCII的比较和转换...
使用Java编写十六进制编辑器的好处在于,开发者可以利用Java丰富的类库来实现各种功能,同时还可以确保代码在不同的操作系统上运行良好。 **文件名称列表:** 提供的文件名列表中只有"SimpleHex-master",这通常是...
十六进制编辑器基于 JTextarea 的十六进制编辑器组件--- 还包含用于测试的实验性 6502 asm/disasm 和 Patrick Meades 6502 模拟器。汇编器特点: 2通。 了解标准 6502 指令集。 .byt 和 .org 指令。 jmp/jsr 和分支...
AptEdit是一款功能丰富实用的文本、十六进制、HTML和程序编辑器。强大的二进制模版,利用二进制模版可以直观的理解和编辑二进制文件。可以显示编辑本地磁盘。内含完整的UNICODE支持,通过另存文件可以转换文件的字符...
UltraEdit 是一套全球最佳、功能强大的文本编辑器文本编辑器,支持文本编辑、十六进制、ASCII 码、HTML、PHP、Perl、Java ...
在标题和描述中提到的“通过使用十六进制编辑器更改应用程序中的十六进制值来释放它”,这暗示了Code Converters可能具有一个特殊的功能,即允许用户直接在二进制级别操作程序。十六进制编辑器是一种高级工具,可以...