Skip to content

Instantly share code, notes, and snippets.

@mitio
Created October 5, 2011 11:00
Show Gist options
  • Save mitio/1264173 to your computer and use it in GitHub Desktop.
Save mitio/1264173 to your computer and use it in GitHub Desktop.
Binary calculations in JavaScript (checksum byte computation)
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<script>
function E(id) {
return document.getElementById(id);
}
window.onload = function () {
var bytesField = E('bytes'),
nibblesField = E('nibbles'),
bytesChecksumField = E('bytes-checksum');
nibblesChecksumField = E('nibbles-checksum');
function calculateChecksum() {
var bytes = bytesField.value,
nibbles = nibblesField.value,
bytesChecksum = 0,
nibblesChecksum = 0,
bytesCount = Math.floor(bytes.length / 2),
nibblesCount = nibbles.length,
i, b, offs;
for (i = 0; i < bytesCount; i++) {
offs = i * 2;
b = parseInt(bytes[offs] + bytes[offs + 1], 16);
bytesChecksum = (bytesChecksum ^ b) & 0xFF;
}
for (i = 0; i < nibblesCount; i++) {
b = parseInt(nibbles[i], 16);
nibblesChecksum = (nibblesChecksum ^ b) & 0xFF;
}
if (bytes == '') {
bytesChecksumField.value = '';
} else {
bytesChecksumField.value = bytesChecksum.toString(16).toUpperCase();
}
if (nibbles == '') {
nibblesChecksumField.value = '';
} else {
nibblesChecksumField.value = nibblesChecksum.toString(16);
}
if (bytesChecksumField.value.length === 1) {
bytesChecksumField.value = '0' + bytesChecksumField.value;
}
}
E('convert').onclick = calculateChecksum;
bytesField.onchange = calculateChecksum;
bytesField.onkeyup = calculateChecksum;
nibblesField.onchange = calculateChecksum;
nibblesField.onkeyup = calculateChecksum;
bytesField.onfocus = function () { this.select(); };
nibblesField.onfocus = function () { this.select(); };
bytesChecksumField.onfocus = function () { this.select(); };
};
</script>
</head>
<body>
Байтове:<br />
<textarea id="bytes" rows="4" cols="80"></textarea><br />
Nibbles:<br />
<textarea id="nibbles" rows="4" cols="80"></textarea><br />
<input type="button" id="convert" value="Пресметнете сумата &darr;" /><br />
Байтова контролна сума: <input type="text" id="bytes-checksum" size="20" readonly="readonly" /><br />
Nibble-контролна сума: <input type="text" id="nibbles-checksum" size="20" readonly="readonly" />
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment