什么是解压缩? 有人可以帮我理解几封信吗?

我正在读这段代码而且我对于发生了什么感到困惑。 此代码使用Ruby的OpenSSL库。

 encrypted_message = cipher.update(address_string) + cipher.final encrypted_message => "G\xCB\xE10prs\x1D\xA7\xD0\xB0\xCEmX\xDC@k\xDD\x8B\x8BB\xE1#!v\xF1\xDC\x19\xDD\xD0\xCA\xC9\x8B?B\xD4\xED\xA1\x83\x10\x1F\b\xF0A\xFEMBs'\xF3\xC7\xBC\x87\x9D_n\\z\xB7\xC1\xA5\xDA\xF4s \x99\\\xFD^\x85\x89s\e" [3] pry(Encoder)> encrypted_message.unpack('H*') => ["47cbe1307072731da7d0b0ce6d58dc406bdd8b8b42e1232176f1dc19ddd0cac98b3f42d4eda183101f08f041fe4d427327f3c7bc879d5f6e5c7ab7c1a5daf47320995cfd5e8589731b"] 

似乎H指令是这样的:

hex字符串(高半字节优先)

如何将encrypted_message中的转义字符转换为字母和数字?

我认为问题的核心是我不理解这一点。 到底是怎么回事?

 ['A'].pack('H') => "\xA0" 

这是对Ruby的打包和解包方法的一个很好的解释。

根据你的问题:

 > ['A'].pack('H') => "\xA0" 

一个字节由8位组成。 半字节由4位组成。 所以一个字节有两个半字节。 ‘h’的ascii值是104.hex值104是68.这68存储在两个半字节中。 第一个半字节,意思是4位,包含值6,第二个半字节包含值8.通常我们首先处理高半字节,然后从左到右选择值6然后选择8。

在上面的例子中,输入’A’不是ASCII’A’而是hex’A’。 为什么它是’A’。 它是hex’A’,因为指令’H’告诉pack将输入值视为hex值。 由于’H’首先是高半字节,并且因为输入只有一个半字节,所以这意味着第二个半字节为零。 因此输入从[‘A’]变为[‘A0’]。

由于hex值A0不会转换为ASCII表中的任何内容,因此最终输出保留为原样,因此结果为\ xA0。 前导\ x表示该值为hex值。