Swiftpack.co - Package - tsolomko/BitByteData


Swift 4.1 GitHub license Build Status

A Swift framework with classes for reading and writing bits and bytes.


BitByteData can be integrated into your project using Swift Package Manager, CocoaPods or Carthage.

Swift Package Manager

To install using SPM, add BitByteData to you package dependencies and specify it as a dependency for your target, e.g.:

import PackageDescription

let package = Package(
    name: "PackageName",
    dependencies: [
        .package(url: "https://github.com/tsolomko/BitByteData.git",
                 from: "1.2.0")
    targets: [
            name: "TargetName",
            dependencies: ["BitByteData"]

More details you can find in Swift Package Manager's Documentation.


Add pod 'BitByteData', '~> 1.2' and use_frameworks! to your Podfile.

To complete installation, run pod install.


Add to your Cartfile github "tsolomko/BitByteData" ~> 1.2.

Then run carthage update.

Finally, drag and drop BitByteData.framework from Carthage/Build folder into the "Embedded Binaries" section on your targets' "General" tab in Xcode.


Use ByteReader class to read bytes. For reading bits there are two classes: LsbBitReader and MsbBitReader, which implement BitReader protocol for two bit-numbering schemes ("LSB 0" and "MSB 0" correspondingly). Both LsbBitReader and MsbBitReader classes inherit from ByteReader so you can also use them to read bytes (but they must be aligned, see documentation for more details).

Writing bits is implemented in two classes LsbBitWriter and MsbBitWriter (again, for two bit-numbering schemes). They both conform to BitWriter protocol.

Note: All readers and writers aren't structs, but classes intentionally. This is done to make it easier to pass them as arguments to functions and to eliminate unnecessary copying and inouts.


Every function or type of BitByteData's public API is documented. This documentation can be found at its own website.


Whether you find a bug, have a suggestion, idea or something else, please create an issue on GitHub.

If you'd like to contribute code, please create a pull request on GitHub.

Note: If you are considering working on BitByteData, please note that Xcode project (BitByteData.xcodeproj) was created manually and you shouldn't use swift package generate-xcodeproj command.


Stars: 2
Help us keep the lights on


Used By



1.2.0 - Apr 29, 2018

  • Updated to support Swift 4.1.
  • Added bytesLeft and bytesRead computed properties to ByteReader.
  • Added int(fromBytes:), uint16(fromBytes:), uint32(fromBytes:), and uint64(fromBytes:) functions to ByteReader (and bit readers, since they are inherited from ByteReader).
  • Added byte(fromBits:), uint16(fromBits:), uint32(fromBits:), and uint64(fromBits:) functions to LsbBitReader and MsbBitReader, as well as BitReader protocol.
  • int(fromBits:) function now has a precondition that its argument doesn't exceed Int bit width.
  • Reverted "disable symbol stripping" change from 1.1.1 update, since underlying problem in Carthage was fixed.
  • Small updates to documentation.

1.2.0-test.3 - Apr 9, 2018

  • Updated to Swift 4.1/Xcode 9.3.
  • Reverted change, that explicitly disabled STRIP_INSTALLED_PRODUCT Xcode project setting to workaround Carthage problems with archiving.
  • Small updates to documentation.

1.2.0-test.2 - Mar 17, 2018

In this second test release several precondition checks introduced in the previous test release were corrected, as well as more missing functions were added.

1.2.0-test - Mar 14, 2018

The main purpose of the upcoming 1.2.0 update is to add missing functionality in terms of return types and bit/byte reading.

Also, the current plan is to wait for the 4.1 release of Swift language and only then release 1.2.0 update, so any necessary modifications required by the new version of Swift can be released without delay.

1.1.1 - Mar 4, 2018

  • Added missing documentation for bitsLeft and bitsRead properties.
  • Temporary disable symbol stripping in Xcode project to prevent symbols being stripped in archives published on GitHub Releases, until Carthage releases an update that solves this issue (these archives are generated by Carthage).