Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

hamming-codec

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

hamming-codec

Simple encode/decode utilities for bit-error correcting Hamming codes

  • 0.3.5
  • PyPI
  • Socket score

Maintainers
1

hamming-codec

Simple encode/decode utilties for single-bit error correcting Hamming codes

GitHub Actions Status Badge: CI/CD GitHub Actions Status Badge: cpp_build centos7_build pre-commit.ci status Code style: black License: MIT

Table of Contents

  1. Requirements
  2. Installation
  3. Python Usage
  4. C++ Usage
  5. Error-correction
  6. References

Requirements

Tested on Python >=3.6 and requires C++ compilers supporting C++17 features.

Installation

Python Installation

Install using pip as follows:

$ python -m pip install hamming-codec

C++ Installation

If you wish to use the hamming-codec encoding/decoding from within C++, one needs to include the single header file src/cpp/hamming_codec.h in their project. There are a few ways to do this:

  1. Copy the file hamming_codec.h into your project's include path.
  2. Add hamming-codec as a sub-module (or equivalent) and use CMake to expose the HAMMING_CODEC_INCLUDE_DIRS variable by calling add_subdirectory(/path/to/hamming_codec) to your project's CMakeLists.txt file. See src/cpp/examples/CMakeLists.txt for an example.

Following either approach, you should be able to add #include "hamming_codec.h" to your source code.

Python Usage

From the Command-line

After following the Python installation, a commandline utility hamming will be available to you, which can be used for simple encoding and decoding of data words. Use hamming --help to show the full set of options and commands.

Encoding

You can use the hamming commandline utility to encode messages of specified length (in number of bits) as follows:

$ hamming encode 0x1234 16
0x2a3a1 21

Which shows that the 16-bit message 0x1234 is encoded as a 21-bit word 0x2a3a1.

Decoding

You can use the hamming commandline utility to decode messages of specified length (in number of bits) as follows:

$ hamming decode 0x2a3a1 21
0x1234 16

Which shows that the 21-bit encoded message 0x2a3a1 is decoded back into the 16-bit word 0x1234.

Importing as a Module

Once you have installed hamming-codec, you can import the hamming_codec module and perform encoding/decoding like so:

>>> import hamming_codec
>>> encoded_message = hamming_codec.encode(0x4235, 16)
>>> print(encoded_message)
010001010001110101100
>>> hex(int(encoded_message,2))
'0x8a3ac'
>>> decoded_message = hamming_codec.decode(int(encoded_message,2), len(encoded_message))
>>> print(decoded_message)
0100001000110101
>>> hex(int(decoded_message,2))
'0x4235'

C++ Usage

Including in your Project

Following the steps to add hamming-codec to your include path, you can encode/decode messages as follows:

#include "hamming_codec.h"
...
uint32_t n_bits = 16;
uint32_t input_message = 0x4235;
std::string encoded_message = hamming_codec::encode(input_message, n_bits);
std::cout << "Encoded message: 0x" << std::hex << std::stoul(encoded_message, 0, 2) << std::endl; // prints "Encoded message: 0x8a3ac"
std::string decoded_message = hamming_codec::decode(std::stoul(encoded_message, 0, 2), encoded_message.length());
std::cout << "Decoded message: 0x" << std::hex << std::stoul(decoded_message, 0, 2) << std::endl; // prints "Decoded message: 0x4235"

C++ Examples

After following the steps to build the C++ library, you can run the C++ examples. For example,

$ ./build/bin/example_encode 0x4235 16
0x8a3ac 21

Single-bit Error Correction

The Hamming encoding algorithm used within hamming-codec allows for single-bit error corrections. That is, during the decoding process, errors in which a single bit has been flipped in the encoded message can both be detected and corrected.

For example, if we flip a single bit in the encoded message from a previous section such that the 21-bit word 0x2a3a1 becomes 0x2a1a1, you will get the same decoded message as before:

$ hamming encode 0x1234 16
0x2a3a1 21
$ hamming decode 0x2a3a1 21
0x1234 16
$ hamming decode 0x2a1a1 21 # flipped a bit
0x1234 16 # ...but decodes the same as before!

References

Further information about the Hamming encoding algorithm employed within hamming-codec can be found in the following resources:

FAQs


Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc