Hamming Codeimport java.io.*;
import java.util.*;
// This program reads a text file, input.txt.
// For each character, it produces a hexadecimal number which is the hamming
// code for 8-bit characters using even parity. These hex numbers are written to hamming.txt
// Copyright (c) Paul Koester, Dallas County Community College, 2017
public
class Hamming
{
private char letter;
// The Ascii character with no parity bits
private int[] bits = new int[12];
private int code;
// The integer value of the character with the parity bits added
public Hamming(char let) { letter = let; encode(); }
public Hamming(int c) { code = c; decode(); }
public int getCode() { return code; }
public char getLetter() { return letter; }
private void encode() {
int value = letter;
// Set value bits
for (int i = 0; i < 12; i++) {
if (i != 0 && i != 1 && i != 3 && i != 7) {
bits[i] = value % 2;
value /= 2;
}
}
// Set parity bits
bits[0] = bits[2] ^ bits[4] ^ bits[6] ^ bits[8] ^ bits[10]; // ^ is XOR in Java
bits[1] = bits[2] ^ bits[5] ^ bits[6] ^ bits[9] ^ bits[10];
bits[3] = bits[4] ^ bits[5] ^ bits[6] ^ bits[11];
bits[7] = bits[8] ^ bits[9] ^ bits[10] ^ bits[11];
// compute integer code
code = 0;
for (int i = 11; i >= 0; i–) {
code *= 2;
code += bits[i];
}
}
private void decode() {
int error = 0;
int value = code;
// Set the bit array
for (int i = 0; i < 12; i++) {
bits[i] = value % 2;
value /= 2;
}
// Check for transmission errors
if (bits[0] != (bits[2] ^ bits[4] ^ bits[6] ^ bits[8] ^ bits[10])) error += 1;
if (bits[1] != (bits[2] ^ bits[5] ^ bits[6] ^ bits[9] ^ bits[10])) error += 2;
if (bits[3] != (bits[4] ^ bits[5] ^ bits[6] ^ bits[11])) error += 4;
if (bits[7] != (bits[8] ^ bits[9] ^ bits[10] ^ bits[11])) error += 8;
// Correct Error
if (error != 0)
bits[error - 1] ^= 1;
// Extract character
letter = 0;
for (int i = 11; i >= 0; i–) {
if (i != 0 && i != 1 && i != 3 && i != 7) {
letter *= 2;
letter += bits[i];
}
}
// Display where error detected
if (error != 0)
System.out.println(“Error in bit ” + (error – 1) + ” corrected in character ” +
letter);
}
public static void main(String[] args) throws FileNotFoundException
{
Scanner inFile = new Scanner( new File(“hamming.txt”));
PrintStream outFile = new PrintStream(new File(“output.txt”));
String line;
int code;
System.out.println(“File hamming.txt opened”);
while (inFile.hasNextInt(16)) {
code = inFile.nextInt(16);
// Decode the Hex code to get a character
// Create a Hamming object
Hamming ham = new Hamming(code);
// Display the decoded character
outFile.print(ham.getLetter());
}
inFile.close();
System.out.println(“File output.txt closed”);
}
}
Additional Information
COSC 2425 – Computer Organization
Lab #2 – Hamming Code
Attached to this assignment is a Java program that converts a text file to a list of hexadecimal
numbers. Each of those hexidecimal numbers represents the bit pattern of a character from the
file with the parity bits (even parity) for a hamming code inserted. Each text character takes 8
bits and the hamming code adds 4 bits. This hamming code provides single-bit error correction.
Requirements 1. The program must be written in Java. If you have not used Java before, you can
learn it enough to do this assignment, by looking at the provided program. 2. You can use
Eclipse to write, compile and test your program, but you may also use any other development
environment you like. Only the .java file will be submitted. 3. The program will use the provided
Hamming class. It will implement the decode function. The decode function is the reverse of the
encode function, but it also performs single bit correction when necessary. 4. Display a message
to the console when an error is corrected, as in the example below. 5. The main function must be
rewritten to read hexidecimal numbers from hamming.txt file and write decoded and corrected
text to output.txt. 6. Test the program with different input files. The instructor will test it with a
hamming.txt file different from the one provided. Hint: The Java hasNextInt(16) and nextInt(16)
input functions are helpful in reading hexadecimal numbers from a file. Upload: Your Java
(.java) file. Sample Output File hamming.txt opened Error in bit 9 corrected in character 2 Error
in bit 3 corrected in character c Error in bit 10 corrected in character p File output.txt closed
Hamming with 3 single bit errors.txt
49D
4FC
51C
49D
283
31A
329
31A
32E
282
4C8
606
667
667
64D
679
635
2C2
61F
67E
62B
62C
282
64D
679
380
7AD
7AA
282
632
64D
660
62C
2FA
52
Hamming.txt
49D
4FC
51C
49D
282
31A
329
31A
32E
282
4C8
606
667
667
64D
679
635
282
61F
67E
62B
62C
282
64D
679
780
7AD
7AA
282
632
64D
660
62C
2FA
52
Input.txt
COSC 2425 Hamming code input file.