Xoring与空间字符的字母表信件

时间:2012-03-12 00:39:00

标签: unicode ascii xor

有没有历史原因为什么Xoring任何带空格字母的字母字母会改变字母的大小写? (即'a'xor''='A','F'xor''='f'等......)

或者这只是一个巧合?

(假设字符是ASCII或unicode编码的。)

6 个答案:

答案 0 :(得分:17)

我确信故意通过改变一个位来改变案例 - 这将使早期软件更有效率。空格字符为#32的事实无关紧要。

答案 1 :(得分:10)

来自ASCII上的维基百科条目:

  

代码本身已经过图案化,因此大多数控制代码都是   在一起,和所有的图形代码在一起,为了方便   鉴定。前两列(32个位置)保留用于   控制人物。[19] “空间”角色必须来到之前   图形使排序更容易,所以它成为位置20hex; [20]为   同样的原因,许多通常用作隔板的特殊标志是   放在数字之前。委员会认为重要的是   支持大写64个字符的字母表,并选择模式ASCII   因此可以轻松地将其缩小为可用的64个字符的图形集   码。[21]因此,小写字母不与之交错   大写。保留小写字母和其他字母的选项   图形,特殊和数字代码安排在之前   字母和字母“A”被放置在位置41hex以匹配   相应的英国标准草案。[22]数字0-9是   因此它们对应于前缀为011的二进制值,   用二进制编码的十进制直接转换。

所以这种行为似乎很巧合。

答案 2 :(得分:4)

Good Point

ASCII是电子机械电传打字机所使用的代码的子代,通常称为Teletype品牌。

这些机器没有有源电子设备......他们使用鼓,电机和凸轮以及大量金属部件来打印大写字符。他们有一些RLC组件和各种继电器。

这是非常慎重的,只有一个位分隔大写和小写字符。这样传输和存储系统可以使用6位而不是7位。

事实上,您不需要XOR,您可以使用OR或ADD来获得小写范围。

通过简单地忽略一位,只能打印大写的设备能够处理混合大小写输入。有意义的是,这个位将用在空格字符中...它在类型元素选择方面通常被忽略。

Here is a quite old one restored to working order.

答案 3 :(得分:1)

这只是ASCII字母的一个特征,以及以类似方式分配的一些其他字母集。对于Unicode中的绝大多数字母字符,它不会发生。例如,Â是U + 0100,ā是U + 0101。通常,小写和大写字母通常被分配给连续的代码位置。 Unicode中的大多数字母字符都没有小写/大写概念。

答案 4 :(得分:0)

这不是巧合,总是如此。

   Example:  hex of 'a' = 61  hex of space = 20 XOR 'a' and space = 41 = 'A' (in hex)
   same as:  hex of 'z' = 7A  hex of space = 20 XOR 'z' and space = 5A = 'Z' (in hex)

答案 5 :(得分:0)

在ASCII中,大写字母是从A = 1 0 0.0001开始的连续二进制数字,而小写字母是从a = 1 1 0.0001开始的连续二进制数字。 。换句话说,可以通过翻转第二位来改变字母的大小写。翻转第二位等效于与010.0000的按位XOR。碰巧是空格字符的ASCII表示。

正如其他人所指出的,肯定是故意的,大写字母和小写字母仅相差一点。由此可见,将任何字母与该位置上的1和其他位置上的0表示的字符进行异或运算将翻转其大小写。但这似乎不太可能是 reason 空格字符分配给010.0000的原因。如果将010.0000用作一个句点,美元符号,数字0或任何其他字符更有意义,那么使用该字符将XOR转换为字母也同样容易。

(请注意,我只是使用二进制数内的句点对位进行分组,以使其更易于阅读。它们没有任何其他意义。)