Base64 Encoding in Co-array Fortran
Our program demonstrates base64 encoding and decoding in Co-array Fortran. Here’s the full source code:
program base64_encoding
use iso_fortran_env
use base64_mod
implicit none
character(len=19) :: data = "abc123!?$*&()'-=@~"
character(len=:), allocatable :: sEnc, sDec, uEnc, uDec
! Standard base64 encoding
sEnc = encode_base64(data)
print *, sEnc
! Standard base64 decoding
sDec = decode_base64(sEnc)
print *, sDec
print *
! URL-safe base64 encoding
uEnc = encode_base64_url(data)
print *, uEnc
! URL-safe base64 decoding
uDec = decode_base64_url(uEnc)
print *, uDec
end program base64_encodingIn this example, we’re using a hypothetical base64_mod module that provides base64 encoding and decoding functionality. Co-array Fortran doesn’t have built-in support for base64, so we assume the existence of this module.
The program starts by defining a string that we’ll encode and decode.
We then use the encode_base64 function to perform standard base64 encoding. The encoded string is stored in sEnc and then printed.
For decoding, we use the decode_base64 function. The result is stored in sDec and printed. In a real-world scenario, you might want to check for decoding errors.
We repeat the process for URL-safe base64 encoding and decoding using encode_base64_url and decode_base64_url functions.
To run the program, save it as base64_encoding.f90 and compile it with your Co-array Fortran compiler. For example:
$ caf base64_encoding.f90 -o base64_encoding
$ ./base64_encodingThe output should look similar to this:
YWJjMTIzIT8kKiYoKSctPUB+
abc123!?$*&()'-=@~
YWJjMTIzIT8kKiYoKSctPUB-
abc123!?$*&()'-=@~Note that the standard and URL-safe encodings differ slightly (trailing + vs -), but both decode to the original string as expected.
Remember, this example assumes the existence of a base64_mod module. In practice, you might need to implement base64 encoding and decoding yourself or use a third-party library, as Co-array Fortran doesn’t provide built-in base64 support.