【发布时间】:2014-05-01 13:28:08
【问题描述】:
我需要解压压缩的 ASCII 字符串。算法如下:
- 获取 3 个压缩的 ASCII 字节,将它们放入 4 个 ASCII 字节。 (6 + 6 + 6 + 6 位在 3 字节到 4 字节)
- 对于每个字节,将第 6 位设置为第 5 位的补码。
- 对于每个字节将第 7 位重置为零。
- 重复接下来的 3 个打包字节。
我是 Ruby 新手,可能有更正确和优雅的方法来解决这个任务,而不是我的代码:
while i < pstr.length
parr = [pstr[0] & 0x3F, pstr[0]>>6 | ((pstr[1] << 2 ) & 0x3F),
pstr[1]>>4 | ((pstr[2] << 4 ) & 0x3F),
pstr[2]>>2]
parr.collect! { |a| a | (~(a << 1) & 0x20) }
parr.collect! { |a| a & 0x7F }
puts parr
i += 3
end
更新1:感谢更正收集。
【问题讨论】:
-
澄清一下:您的代码按预期工作(例如通过测试),但您需要 Ruby 习语或捷径方面的帮助?您能否在问题中添加一些测试输入和经过验证的输出,这会有所帮助。
-
你看过
#unpack吗? ruby-doc.org/core-2.1.1/String.html#method-i-unpack -
@UriAgassi 正如我在文档中所读到的,Ruby 不支持打包/解包中的打包 ASCII 代码。
-
@NeilSlater 代码适用于我拥有的示例,但 ofc 有错误,只是想澄清一下我正确理解 Ruby 构造并且没有办法使用 Ruby 功能以更紧凑的方式解决这个问题。感谢您对收集的更正。
-
您能提供几个测试样本吗?