JAVA:保存编码为数字的字符串(不是 parseInt)

JAVA: saving a string encoded into a number (not parseInt)

提问人:Bi Bi 提问时间:10/30/2022 更新时间:10/30/2022 访问量:30

问:

我想知道是否有办法将字符串转换为要存储的数字(不是 parseInt)。

比如说,我有一个用户输入一个字符串,有没有办法把它转换成一个特定的数字?稍后,该数字可以被解释并打印回相同的字符串吗?"Some characters here and 12234"

我考虑过将其实现为 ASCII 字符,但 ASCII 字符要求每个字符 1 个字节,但我的数字只有 16 位长(短)。

有关详细信息,我正在实现一个基本的计算机模拟器,并尝试实现简单的 I/O 指令。这些数字将存储到大小为 16 位的寄存器中。 问题是指令格式是固定的,即“IN reg, device”或“OUT reg, device”。如果我使用 ASCII,则 reg 一次只能保存 2 个字符,那么我将不得不将其保存到我们的虚拟内存中,但指令中没有指示它在内存中的位置。

Java 字符串 IO 模拟器

评论

0赞 access violation 10/30/2022
然后,我将不得不将其保存到我们的虚拟内存中,但是指令中没有指示它将在内存中的位置。这是使用 IN 指令的“输入字符串”函数的工作,而不是 IN 指令的工作。尽管指令集中只有“将字符读入寄存器”,但许多实际计算机仍设法读取字符串。模拟计算机可以以相同的方式工作。
0赞 Bi Bi 11/3/2022
明白了。感谢您的反馈。我只是很难找到正确的关键字来查找内容。我似乎找不到合适的资源,因为我找到的大多数都是更高级的语言,而这更多的是机器代码。有什么方法可以帮我指出在哪里可以找到这些信息吗?甚至是正确的关键字是什么?
0赞 access violation 11/3/2022
这是一个基本的编程练习:给定一种一次读取单个字符的方法,从字符序列中组合一个整数值。基本步骤是,对于您获得的每个数字值(十进制输入为 0 到 9),将到目前为止的数字乘以 10(如果您想要十进制输入)并添加新的数字值。无论您的 read-a-character 例程是机器指令还是某个“readchar”库例程,算法都是一样的。

答:

0赞 rzwitserloot 10/30/2022 #1

你想要的在数学上是不可能的,通过鸽子洞原理。想象一下,你在一个房间里,里面有 3 个电灯开关,什么都不做。你可以走进去,摆弄开关,然后你必须再次走出去。你不能留下任何东西,你不能惹其他任何东西。

后来我进入同一个房间,我可以看到开关,仅此而已。

我们只能交流 8 种不同的东西,因为我可以完全列举您可能创建的每种情况:DDD、DDU、DUD、DUU、UDD、UDU、UUD 和 UUU。那是 8。

2 字节是相同的,除了它的 16 个电灯开关,而不是 3 个。因此,您可以传达 65536 种不同的状态 (2^16)。

有超过 65536 个长度为 30 左右的字符串,其中消息“此处的一些字符和 12234”很长。鉴于您必须将其“压缩”为 65536 个不同的唯一状态,因此您只能表示 65536 个不同的字符串。您可以自由选择所需的 65536 个不同的字符串,但最多只能是 65536 个字符串。毕竟,想象一下“Hi”和“Hello”都压缩到“01 191”。所以如果我看到“01 191”,你是说嗨还是说你好?这是不可能知道的。

如果您严重减少消息中可以包含的符号数量,那么让我们只减少到大写字母、空格和数字,仅此而已。没有点,没有破折号,没有下划线,没有加号,没有问号。只有 26 + 1 + 10 = 37 个字符。为了方便起见,让我们再敲掉 5 个 - 我们使“x”不可能,0 和 1(我猜只使用字母“o”和“l”)、q 和 z。现在是 32 个字符。可以用正好 5 位表示。你有 16 个 em,所以你现在可以用你的 16 位表示 3 个字母,剩下 1 位。

但仅此而已。

评论

0赞 Bi Bi 11/3/2022
明白了。感谢您的反馈。我知道现在这是不可能的。但是,如果用户输入一个长字符串,将如何实现呢?我可以阅读任何资源以更好地了解如何实现这一点?
0赞 rzwitserloot 11/3/2022
例如,您可以发送 1 个字节或 2 个字节来表示字符串大小(如果您发送 1,则字符串不能超过 255 个字符;如果您发送 2 个字符,则限制为 65535 个字符),然后发送该多个字节,例如使用 UTF-8 或 US-ASCII 或 ISO-8859-1 编码(这些编码将字符串转换为字节)。没有任何其他方法可以做到这一点,就其性质而言,字符串是可变大小的。
0赞 Bi Bi 11/5/2022
我明白了,非常感谢!你的解释给了我一个关于如何工作的好主意。再次感谢!