encode_int64_base64 Subroutine

public subroutine encode_int64_base64(values, output)

Encode integer array as base64 int64 string (fixed-length output)

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: values(:)
character(len=256), intent(out) :: output

Source Code

  subroutine encode_int64_base64(values, output)
    !! Encode integer array as base64 int64 string (fixed-length output)
    use iso_fortran_env, only: int8, int64
    implicit none
    integer, intent(in) :: values(:)
    character(256), intent(out) :: output

    integer(int8), allocatable :: bytes(:)
    integer(int64) :: ival64
    integer :: i, j, n, nbytes

    n = size(values)
    nbytes = n * 8
    allocate(bytes(nbytes))

    do i = 1, n
       ival64 = int(values(i), int64)
       do j = 0, 7
          bytes((i-1)*8 + j + 1) = &
               int(iand(ishft(ival64, -j*8), int(255, int64)), int8)
       end do
    end do

    call base64_encode_bytes_fixed(bytes, nbytes, output)
    deallocate(bytes)

  end subroutine encode_int64_base64