BitManipulator 1.0.4

A set of extension methods for doing bitwise manipulation such as endianness (bytes<-->integral types) and rotation.

Endianness-related functionality: short, ushort, int, uint, long, ulong : conversion between (to and from) individual items of these and byte arrays, and between arrays of any of these (UInt32[], for example) and byte arrays.
Little and big-endian methods exist at feature and/or type parity.

Rotation-related functionality: byte, short, ushort, int, uint, long, ulong : left and right bitwise circular rotation ("rotate no carry").
Please note: the rotation implemented here is NOT "rotate through carry"! As such, sign is NOT handled specially for signed types.

Endianness conversions operating on multiple values (bulk operations) are performance-enhanced with optimised 'unsafe' implementations. They are considerably faster than comparable operations provided by the BCL.

There is a newer version of this package available.
See the version list below for details.
Install-Package BitManipulator -Version 1.0.4
dotnet add package BitManipulator --version 1.0.4
<PackageReference Include="BitManipulator" Version="1.0.4" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add BitManipulator --version 1.0.4
The NuGet Team does not provide support for this client. Please contact its maintainers for support.

Release Notes

Added runtime check for system endianness, which controls which methods to use.

Functionality related to endianness added: all types now have integer array to/from byte array methods (each with its own 'unsafe' high-performance implementations), as well as their own  _NoChecks methods like the rest of the use-modes (e.g. single value conversion vs. batch).
Also, Int16/short methods were added.

Functionality related to rotation added: byte methods.

Optimised avoiding validating arguments as much as possible for performance (don't do it when its totally unnecessary, e.g. using a programatically-defined array where the offset and length are controlled). It really makes a difference in tight loops and the like (if one cannot use the batch processing methods - for example, if a non-linear array access pattern is required).


This package has no dependencies.

Version History

Version Downloads Last updated
1.0.5 890 1/25/2015
1.0.4 471 10/17/2014
1.0.2 391 10/16/2014
1.0.1 389 10/16/2014
1.0.0 423 10/11/2014