Bread-Experts-Group / byteflippers

Signed/modular types for system, big and little endian reading/writing.

Repository from Github https://github.comBread-Experts-Group/byteflippersRepository from Github https://github.comBread-Experts-Group/byteflippers

byteflippers

View the Alire Crate

Modular and signed types to convert between big and little endian, such as 50 (0x00000032) to 838860800 (0x32000000). Currently supported are 16/32/64/128-bit sized signed/modular numeric types for big/little endian respectively, as well as system-endian dependent base types for 8/16/32/64/128-bit signed/modular numeric types.

All types are compatible with Interfaces operators, such as Shift_Left, Shift_Right, Rotate_Left, Rotate_Right, as well as (where applicable) xor, and, or.

NOTE: This library depends on the GNAT compiler, as it depends on the Provide_Shift_Operators pragma. If you need support for another compiler, please let me know, and I'll try to support it.

Example Use

with Byteflippers;

with Ada.Text_IO;
with Ada.Streams.Stream_IO;
use  Ada.Streams.Stream_IO;

procedure Scratch is
    package Endians_u32 renames Byteflippers.Endians_Unsigned_32;

    F : File_Type;
    S : Stream_Access;
begin
   Create (F, Name => "test.bin");
   S := Stream (F);
   Byteflippers.Signed_32'Write (S, 1234);
   Endians_u32.Little_Endian'Write (S, 5678);
   Endians_u32.Little_Endian'Write (S, 9101);
   Endians_u32.Big_Endian'Write (S, 1213);
   Endians_u32.Big_Endian'Write (S, 1415);

   Close (F);   
   Open (F, In_File, "test.bin");
   S := Stream (F);

   Ada.Text_IO.Put_Line ("# System Endian Test");
   Ada.Text_IO.Put_Line (Byteflippers.Signed_32'Input (S)'Image);
   Ada.Text_IO.Put_Line ("# Little Endian Test (System / Little)");
   Ada.Text_IO.Put_Line (Byteflippers.Signed_32'Input (S)'Image);
   Ada.Text_IO.Put_Line (Endians_u32.Little_Endian'Input (S)'Image);
   Ada.Text_IO.Put_Line ("# Big Endian Test (System / Big)");
   Ada.Text_IO.Put_Line (Byteflippers.Signed_32'Input (S)'Image);
   Ada.Text_IO.Put_Line (Endians_u32.Big_Endian'Input (S)'Image);
end Scratch;

About

Signed/modular types for system, big and little endian reading/writing.

License:Apache License 2.0


Languages

Language:Ada 100.0%