在 Ruby 中计算一个字节是奇校验还是偶校验的最佳方法是什么?我有一个可用的版本:
result = "AB".to_i(16).to_s(2).count('1').odd?
=> true
不过,将数字转换为字符串并计算“1”似乎是一种糟糕的计算奇偶校验的方法。有什么更好的方法吗?
我希望能够计算 3DES key 的奇偶校验。最终,我想将偶数字节转换为奇数。
谢谢, 丹
最佳答案
除非你拥有的速度不够快,否则请保留它。它清晰简洁,性能比您想象的要好。
我们将根据数组查找对所有内容进行基准测试,这是我测试过的最快的方法:
ODD_PARITY = [
false,
true,
true,
...
true,
false,
]
def odd_parity?(hex_string)
ODD_PARITY[hex_string.to_i(16)]
end
- 数组查找以每秒 640,000 字节的速率计算奇偶校验。
- Bowsersenior 的 C 代码以每秒 640,000 字节的速率计算奇偶校验。
- 您的代码以每秒 284,000 字节的速率计算奇偶校验。
- Bowsersenior 的 native 代码以每秒 171,000 字节的速率计算奇偶校验。
- Theo 的缩短代码以每秒 128,000 字节的速率计算奇偶校验。
关于ruby - 在 Ruby 中计算一个字节的奇偶校验,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4481887/