【发布时间】:2018-10-17 14:30:02
【问题描述】:
我在这个论坛上看到了很多相关的问题和答案,但没有找到任何可以解决我问题的东西。
这个想法很简单:
(这是使用 Java 编程语言 - 我目前仅限使用 Java 7)
接收到一个字节数组(表示任何内容:某种有线格式、某种形式的编码数据、带有嵌入“文本”的二进制数据等)。我希望能够以以下形式打印数组:
- 十六进制字符串
- 作为“可打印”文本
第一种情况部分是出于调试原因,但也可能在非调试模式下使用。第二种情况纯粹是出于调试原因,并且允许与其他信息源进行人工比较。
我认为我对第一种情况有解决方案,但我正在为第二种情况苦苦挣扎。
显然,一个字节数组可能包含不可打印的字符或以不同方式呈现的字符。如何“打印”一个数组以便表示所有字节?我可以提供的一个很好的模拟是 UNIX od 命令,其中od -ah 以十六进制形式显示二进制数据以及 ASCII 字符。在这种情况下,点 (.) 通常用于代替不可打印或控制字符。
我不需要它看起来像od 输出的那样,但希望能够显示数据,以便至少可以看到可打印的字符,其余的用某种占位符表示。另外,我不想删除不可打印的字符,因为这会误导数据。
如果有人知道如何实现这一点,我将不胜感激。
【问题讨论】:
-
1) 只需将字节打印为十六进制 2) 使用 new String(byte[]) 创建字符串 - 定义不可打印字符并预先替换它们
-
@Antoniossss 但是
new String(byte[])使用用户的默认字符编码,所以要执行替换步骤,您必须弄清楚它是什么,并知道该字符集的哪些字符是不可打印的.对于推测性调试转储来说似乎有点复杂。 -
我会使用 UTF-8,因为无论如何你都不关心编码
标签: java arrays string representation