`
liugang594
  • 浏览: 985915 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java十六进制编辑器的实现

阅读更多

所谓的十六进制编辑器,就是把用十六进制的方式打开一个文件,其中读进来的每个字节被做为两个十六进制数看待,例如:

 

读入字节: 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. **二进制数据处理**:理解如何在程序中表示和操作二进制数据,...

    ImHex:一款功能强大的十六进制编辑器

    ImHex是一款功能强大的十六进制编辑器,该工具专为逆向工程分析师、编程开发人员以及那些想好好保护自己眼睛的安全人员所设计。 功能丰富的十六进制数据界面:字节修复、修复管理、字节拷贝(字节、十六进制字符串...

    数值与十六进制文本的相互转换.rar

    8. **调试和分析工具**:在开发和调试过程中,程序员经常使用十六进制查看器或十六进制编辑器来检查二进制文件或内存内容,如使用十六进制转换工具可以方便地分析和理解数据。 9. **网络通信**:在TCP/IP协议栈中,...

    键盘键值表(键盘值相对应的十六进制)

    在Java程序中,键盘键值表可以用于实现各种功能,例如,文本编辑器中的快捷键、游戏中的操作键等。 此外,键盘键值表还可以与ASCII码结合使用,以便于实现字符串的处理。例如,使用ASCII码,可以将字符串转换为十六...

    jhexedit:Java十六进制编辑器

    【标题】"jhexedit:Java十六进制编辑器"是一个基于Java的十六进制编辑工具,它由Swing库构建,提供了丰富的功能,让用户能够查看和编辑二进制文件的十六进制表示形式。这款编辑器的独特之处在于,不仅可以作为独立的...

    HxD:免费小巧好用的十六进制编辑器

    HxD是一款免费的十六进制编码处理工具,它完全不逊于市面上任何一款付费使用的专业十六进制编辑工具,除了能够快速打开大容量的文件以及基本的十六进制编码处理外,它还具备了直接对内存内容进行编辑的功能(这一般...

    npp.5.4.5.Installer.rar_npp.4.5_十六进制编辑

    总的来说,Notepad++ 5.4.5不仅是一个高效的文本编辑器,更因其内置的十六进制编辑功能,成为了IT专业人士不可或缺的工具之一。通过下载并安装npp.5.4.5.Installer.exe,用户将能够体验到这一强大功能,并在实际工作...

    imhex-功能强大的十六进制编辑器,开源软件

    功能丰富的十六进制数据界面:字节修复、修复管理、字节拷贝(字节、十六进制字符串、C、C++、C#、Rust、Python、Java和JavaScript数组、HTML自包含div等)。字符串、十六进制搜索。自定义C++类模式语言,支持对文件...

    16进制编辑器winhex

    在读java编译后.class文件的时候可以用来查看16进制数据; winhex 是一个专门用来对付各种日常紧急情况的...总体来说是一款非常不错的 16 进制编辑器。得到 ZDNetSoftwareLibrary 五星级最高评价,拥有强大的系统效用。

    16进制解析器

    WinHex是一款著名的16进制编辑器,它允许用户查看、编辑和操作二进制文件以及内存中的十六进制数据。 首先,我们需要理解16进制(Hexadecimal)是计算机科学中常用的一种数值表示方式,它基于16个符号(0-9 和 A-F...

    16进制编辑器(HxD)64位v2.1.0.0中文绿色免费版

    HxD-16进制编辑器是一款可以在电脑上运行的免费十六进制编码处理工具,支持64位操作系统,它完全不逊于市面上任何一款付费使用的专业十六进制编辑工具,能够快速打开大容量的文件以及基本的十六进制编码处理,需要此...

    ASCII.rar_ascii 十六进制

    3. 在实际应用中的例子,比如网络通信中数据的编码和解码,或者在文本编辑器中查看字符的二进制和十六进制表示。 4. 与ASCII相关的其他编码系统,如Unicode(包括UTF-8)和ISO 8859等,以及它们与ASCII的比较和转换...

    SimpleHex:用Java编写的简单十六进制编辑器

    使用Java编写十六进制编辑器的好处在于,开发者可以利用Java丰富的类库来实现各种功能,同时还可以确保代码在不同的操作系统上运行良好。 **文件名称列表:** 提供的文件名列表中只有"SimpleHex-master",这通常是...

    hexeditor:基于 jtextarea 的十六进制编辑器组件

    十六进制编辑器基于 JTextarea 的十六进制编辑器组件--- 还包含用于测试的实验性 6502 asm/disasm 和 Patrick Meades 6502 模拟器。汇编器特点: 2通。 了解标准 6502 指令集。 .byt 和 .org 指令。 jmp/jsr 和分支...

    文本、十六进制、HTML和程序编辑器

    AptEdit是一款功能丰富实用的文本、十六进制、HTML和程序编辑器。强大的二进制模版,利用二进制模版可以直观的理解和编辑二进制文件。可以显示编辑本地磁盘。内含完整的UNICODE支持,通过另存文件可以转换文件的字符...

    UltraEdit 是一套全球最佳、功能强大的文本编辑器文本编辑器,支持文本编辑、十六进制、ASCII 码、HTML、PHP、P

    UltraEdit 是一套全球最佳、功能强大的文本编辑器文本编辑器,支持文本编辑、十六进制、ASCII 码、HTML、PHP、Perl、Java ...

    Code-Converters-:免费的CLEAN代码转换器。 通过使用十六进制编辑器更改应用程序中的十六进制值来释放它

    在标题和描述中提到的“通过使用十六进制编辑器更改应用程序中的十六进制值来释放它”,这暗示了Code Converters可能具有一个特殊的功能,即允许用户直接在二进制级别操作程序。十六进制编辑器是一种高级工具,可以...

    ImHex:适合反向工程师,程序员和在凌晨3点工作时重视视力的人们的十六进制编辑器

    十六点编辑器,适用于反向工程师,程序员和在凌晨3点工作时非常重视视力的人们。 配套 如果您喜欢我的工作,请考虑在GitHub Sponsors,Patreon或PayPal上为我提供支持。 非常感谢! 产品特点 特色的十六进制视图 ...

    Hexstar:可扩展且功能强大的十六进制编辑器

    可扩展且强大的十六进制编辑器 看起来如何 有关这些内容的内容,可以对其进行早期预览: 它会做什么 很有可能 易于下载和安装; 易于使用并摆脱; 能够处理千兆字节大小的文件; 具有校验和,加密,解密和破坏...

    Hex格式详解.zip

    6. **十六进制编辑器**:介绍专门用于查看和编辑十六进制数据的工具,以及它们在分析二进制文件或进行数据恢复中的应用。 7. **十六进制与网络**:在网络通信中,十六进制常用于表示IP地址、端口号等,文档可能涵盖...

Global site tag (gtag.js) - Google Analytics