【发布时间】:2017-08-10 06:13:35
【问题描述】:
我想转储一个数据流,并将字符 0x12 显示为一个字符“12”,左上角可能有一个小“1”,右下角可能有一个“2”。 UNICODE Control Pictures https://en.wikipedia.org/wiki/Control_Pictures 有一个类似的概念,它将“DC2”显示为一个字符,左上角有一个小“D”,右下角有一个“2”——但我希望它是十六进制的。
EDIT 我可以轻松地将不可打印的字节显示为 2 个字符,例如字节 0x12 为 'x' + '1' + '2' 但这需要 3 个打印位置。我希望它打印类似于“%”,其中左上角的“0”被一个小的图形“1”替换,右下角的“0”被一个小的图形“1”替换,并且没有图形笔划。这不是像base64这样的转换为可打印的传输目的;这是为了让我能够打印非显示字节并查看它们的内部位表示。
也许举个例子会有所帮助。让我们取一个 0x00004050 (big-endian) 的 32 位值(4 个字节);我想看到 4 个字符,例如 '%%@P'
EDIT2 生成的 UNICODE 文本将被写入 UNICODE 日志文件,以便在文本编辑器、浏览器或类似工具中通过眼球查看。使用 UNICODE 控件图片我现在可以做到这一点,但我希望为不可打印字符显示 HEX 而不是 C0 控件名称缩写。
【问题讨论】:
-
您似乎要求使用 base-256 编码。我不知道这样做的任何标准方法。您可以随意定位 256 个连续的 Unicode 代码点并滚动您自己的代码点。如果您想以一定的长度扩展为代价变得更加标准,也许您可以只使用base-64?在 base-64 中有许多用于编码和解码字节流的库。
-
我不这么认为。我们可以在 Unicode 10.0 中期待它。下面是成对的、单个的、全角字符、由 U+2060 分隔的数字、由 U+00A0 分隔的对的相反效果: 01 23 45 67 89 AB CD EF
-
你是如何渲染文本的?
-
那么类似于 Unicode 十六进制查看器,每个字节使用 1 个字符而不是 2 个字符?
-
您总是可以只使用 Unicode 的“私人使用”区域之一来定义您自己的表示字节 0x00-0xFF 的自定义代码点,然后创建您自己的字体以根据需要呈现这些代码点。跨度>