【发布时间】:2017-06-19 23:20:59
【问题描述】:
我想在 Commodore 64 上的 BASIC 程序中存储一些二进制数据作为DATA 语句。为了节省空间,我更喜欢存储为字符串,而不是数字序列。
是否可以在DATA 语句中存储从CHR$(0) 到CHR$(255) 的任何字符,或者某些字符不可能以这种方式表示? DATA 语句(如果有)中不能表示的完整字符列表是什么?
我特别想知道 CHR$(0)、双引号 (")、换行符和回车符。如果这些都可以表示,怎么表示?
【问题讨论】:
-
这是可能的,但是您需要编写一个 HEX 编辑器,并在您的字符串中将 2 个字符的值更改为它们的 HEX 值,例如一个空格是 20 十六进制,等等。这将创建您的字符串。我必须在我的 iPad 上找到一个 HEX 编辑器来创建这样一个字符串,然后在每对数字后加上一个逗号。通过一些测试,我可以得到你的答案,或者有人可以更快地创建你的字符串 DATA 语句。然后 READ A$ 和 A=CHR$(VAL(A$)) 可能会这样做。我输入了以下内容:READY。 PRINT CHR$(VAL("80")),它打印了一个 P。
-
@GeorgeMcGinn 您是否建议将数据存储为十六进制,每个字节使用两个字符而不是一个字符?我知道我可以做到这一点,但它需要的空间量会增加一倍。
-
并非如此。每个字符由两个十六进制位(而不是字节)组成。如果您查看 SPACE 的十六进制值,它是 x20。在下面检查我的答案,因为当我输入 x169 时,它会打印 ©,一个字符。下面的数据语句显示了在 DATA 语句中使用十六进制时会发生什么。 C64 BASIC 只能达到 255 个值。因此,我的 DATA 语句中的最后两个已超过 4000。但它们仍然给了您一个字节。否则,如果您不以十六进制存储数据(将其转换为它所代表的符号),则最好存储一串数字,因为没有其他方法可以做到这一点。