summaryrefslogtreecommitdiff
path: root/utilities/hammington2416.py
diff options
context:
space:
mode:
Diffstat (limited to 'utilities/hammington2416.py')
-rw-r--r--utilities/hammington2416.py31
1 files changed, 31 insertions, 0 deletions
diff --git a/utilities/hammington2416.py b/utilities/hammington2416.py
new file mode 100644
index 0000000..46f76f7
--- /dev/null
+++ b/utilities/hammington2416.py
@@ -0,0 +1,31 @@
+#!/usr/bin/python
+
+import sys
+
+_hammingCalculateParityLowNibble = [0, 3, 5, 6, 6, 5, 3, 0, 7, 4, 2, 1, 1, 2, 4, 7]
+_hammingCalculateParityHighNibble = [0, 9, 10, 3, 11, 2, 1, 8, 12, 5, 6, 15, 7, 14, 13, 4]
+
+def HammingCalculateParity128(byte):
+ return _hammingCalculateParityLowNibble[byte&0x0F] ^ _hammingCalculateParityHighNibble[byte >> 4]
+
+def HammingCalculateParity2416(first, second):
+ return HammingCalculateParity128(second) << 4 | HammingCalculateParity128(first)
+
+output = ""
+bytepos = 0
+oldbyte = None
+
+# Read bytewise
+f = open(sys.argv[1])
+for byte in f.read():
+ output += byte
+ oldbyte = byte
+ bytepos += 1
+ if bytepos == 2:
+ bytepos = 0
+ output += str(HammingCalculateParity2416(ord(oldbyte), ord(byte)))
+if bytepos == 1:
+ output += " "
+ output += str(HammingCalculateParity2416(ord(oldbyte), ord(" ")))
+
+print output \ No newline at end of file