nancode.py

download raw

import math
import struct

def nan_with_payload(p):
    return struct.unpack("f", struct.pack("i", 0x7fc0_0000 | p))[0]

def nan_payload(n):
    return struct.unpack("i", struct.pack("f", n))[0] & ~0x7fc0_0000

def nancode(s):
    return [nan_with_payload(ord(c)) for c in s]

def nandecode(l):
    return "".join(chr(nan_payload(i)) for i in l)

encoded = nancode("I 💩 IEEE-754")
assert all(math.isnan(x) for x in encoded)
print("The cyphertext is", encoded)
print("The plaintext is ", nandecode(encoded))