ASCII字符在内存中是如何存储的?

4
考虑一个按照大端模式组织32位字的字节寻址内存的计算机。程序读取从键盘输入的ASCII字符,并将它们存储在连续的字节位置,从位置1000开始。在输入“johnson”之后,在位置1000和1004处的两个内存单元的内容如下:
位置1000: 'j'的ASCII码值 位置1001: 'o'的ASCII码值 位置1002: 'h'的ASCII码值 位置1003: 'n'的ASCII码值 位置1004: 's'的ASCII码值 位置1005: 'o'的ASCII码值 位置1006: 'n'的ASCII码值

4
在转录你的作业问题时,你拼错了ASCII。 - pavium
3
不,不,那是美国信息交换标准代码缩进。你知道的,像制表符或空格这样的东西,人们为此争论得面红耳赤,就像进行圣战一样 :-) - Joey
4个回答

3

只需使用方便的ASCII表将每个字母转换为十六进制,并按顺序添加到内存中。这样可以轻松地呈现出华丽的ASCII图形:

+------+--+--+--+--+
|0x1000|6A|6F|68|6E|
+------+--+--+--+--+

最后四个字节被省略了,毕竟这是作业。

1
你的漂亮的ASCII艺术让我痛苦地想起了我曾经折腾J语言的数小时,它会呈现出像这样的盒装值(http://www.jsoftware.com/help/dictionary/d010.htm)。 - Joey
@Johannes:确实。这让我想起了我的一个答案:https://dev59.com/UXNA5IYBdhLWcg3wmfK5#897414 - Stephan202

0

存储单个字节(如ASCII字符)不存在大小端问题。大小端只涉及到一个值被表示为多个字节的情况。因此,例如,存储字节序列在小端和大端中是相同的,只是字节的表示不同。例如,将数字3735928559(或十六进制表示0xdeadbeef)存储为32位的单词(例如int),存储在内存位置1000将会得到以下结果:

ADR:1000 1001 1002 1004
BE:de ad be ef
LE:ef be ad de


-2
1000: 0x6a 6f 68 6e
         j  o  h  n
1004: 0x73 6f 63 00
        s  o  n  NULL

3
目前你的回答不够清晰,请编辑以添加更多细节,以帮助他人理解它如何回答所提出的问题。你可以在帮助中心找到有关如何撰写良好答案的更多信息。 - Community

-2

我认为这些单词将具有以下价值:

1000: 0x6a6f686e
1004: 0x736f6e00

由于名称仅包含7个字符,第八个字符未知,因此最后一个位置(00)可能具有任何值。

1
你没有在玩游戏,维克托 ;-D - pavium

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接