func makeBitsReversedTable(poly uint16) *Table {
	t := &Table{
		reversed: true,
	}
	width := uint16(16)
	for i := uint16(0); i < 256; i++ {
		crc := i << (width - 8)
		for j := 0; j < 8; j++ {
			if crc&(1<<(width-1)) != 0 {
				crc = (crc << 1) ^ poly
			} else {
				crc <<= 1
			}
		}
		t.entries[i] = crc
	}
	return t
}
makeTable returns the Table constructed from the specified polynomial.
package crc16
const (
	IBM = 0xA001
	CCITT      = 0x8408
	CCITTFalse = 0x1021
	SCSI = 0xEDD1
	MBUS = 0x3D65
)
type Table struct {
	entries  [256]uint16
	reversed bool
	noXOR    bool
}
var IBMTable = makeTable(IBM)
var CCITTTable = makeTable(CCITT)
var CCITTFalseTable = makeBitsReversedTable(CCITTFalse)
var SCSITable = makeTable(SCSI)
var MBusTable = makeBitsReversedTable(MBUS)
func MakeTable(poly uint16) *Table {
	return makeTable(poly)
}
func MakeBitsReversedTable(poly uint16) *Table {
	return makeBitsReversedTable(poly)
}
func MakeTableNoXOR(poly uint16) *Table {
	tab := makeTable(poly)
	tab.noXOR = true
	return tab
}