crc32_in_ruby.rb
来自「CRC校验采用多项式编码方法。多项式乘除法运算过程与普通代数多项式的乘除法相同。」· RB 代码 · 共 49 行
RB
49 行
module Digest
class CRC32InRuby
def initialize(str = nil)
@crc = 0xFFFFFFFF
update(str) if str
end
def hexdigest
"%08x" % (@crc ^ 0xFFFFFFFF)
end
def digest
[@crc ^ 0xFFFFFFFF].pack("N")
end
def update(str)
str.each_byte do |b|
@crc = ((@crc >> 8) & 0x00FFFFFF) ^ CRC_TABLE[((@crc ^ b) & 0xff)]
end
self
end
alias_method :<<, :update
def CRC32InRuby.hexdigest(str)
CRC32.new.update(str).hexdigest
end
def CRC32InRuby.generate_crc_table
table = Array.new(256)
256.times do |i|
crc = i
8.times do
if (crc & 1) == 1
crc = (crc >> 1) ^ 0xEDB88320
else
crc = crc >> 1
end
end
table[i] = crc
# puts "#{i}: %x" % crc
end
table
end
CRC_TABLE = generate_crc_table
end
end
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?