流十六进制数字并以十进制输出流而不等待所有数据出现是否可行

1 algorithm computer-science radix

假设您有一个包含千兆字节的文件

deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef
Run Code Online (Sandbox Code Playgroud)

并且你想将它转换为十进制,就像你将0xdeadbeef转换为3,735,928,559一样.

数字可被2整除的基数很容易实现,因为您可以每隔几位操作并输出一个数字(6为base64).

有什么办法用十进制做到这一点?

编辑:该文件代表一个长号.它重复的事实与数字5555,055,055没有什么不同.

EDIT2:文件大小已知.然后怎样呢?

Jas*_*rff 5

您通常可以在阅读输入之前开始写作.但是如果数字非常接近10的幂,你可能必须读取超过一半的输入才能写出输出的第一个数字!

要了解原因,请举一个相对较小的例子.假设数字是10 60.十六进制编码为50个十六进制数字.读完前34位后,你知道的很多:

9f4f2726179a224501d762422c946590d9................
Run Code Online (Sandbox Code Playgroud)

圆点是您尚未阅读的数字.

此时,您仍然无法写入输出的第一个数字,因为输入可以是任何内容

9f4f2726179a224501d762422c946590d90000000000000000
Run Code Online (Sandbox Code Playgroud)

9f4f2726179a224501d762422c946590d9ffffffffffffffff
Run Code Online (Sandbox Code Playgroud)

而前者是十进制999999999999999999999999999999999999999998847078495393153024,但后者是1000000000000000000000000000000000000000017293822569102704639.所以你还是不知道是写1还是9!直到第35个输入数字才能开始写输出.

通常,在最坏的情况下,在写入第一个输出数字之前,您必须读取大约四分之三的输入.