16 進数を読み取る関数がありますが、正しく読み取れません。多項式関数は、文字列を 16 進数ではなく ASCII として読み取ります。
作業を行っているコードの部分は次のとおりです。
JButton button = new JButton("Calculate");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String str = textArea.getText();
int crc = 0xFFFF;
int polynomial = 0x1021;
byte bytes[] = str.getBytes();
for (byte b : bytes) {
for (int i = 0; i < 8; i++) {
boolean bit = ((b >> (7-i) & 1) == 1);
boolean c15 = ((crc >> 15 & 1) == 1);
crc <<= 1;
if (c15 ^ bit) crc ^= polynomial;
}
}
crc &= 0xFFFF;
textField.setText(""+Integer.toHexString(crc));
}
});
button.setBounds(10, 245, 90, 25);
panel.add(button);