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 + -
显示快捷键?