Если на самом деле вы пытаетесь зашифровать строку в юникоде, то вы можете использовать функции .NET для преобразования строк в байтовые массивы и из них, будь то UTF8 или UTF32. UTF8 более эффективно использует память в виде байтов, но если вы должны хранить символы в виде целых чисел один к одному, то выполнение UTF32 приведет к меньшему количеству целых чисел. Обратите внимание, что использование кодировки ASCII не сохранит символы Юникода.
open System.Text
let s = "abc æøå ÆØÅ"
let asciiBytes = Encoding.ASCII.GetBytes s
let asciiString = Encoding.ASCII.GetString asciiBytes
printfn "%s" asciiString // outputs "abc ??? ???"
let utf8Bytes = Encoding.UTF8.GetBytes s
let utf8String = Encoding.UTF8.GetString utf8Bytes
printfn "%s" utf8String // outputs "abc æøå ÆØÅ"
let utf32Bytes = Encoding.UTF32.GetBytes s
let utf32String = Encoding.UTF32.GetString utf32Bytes
printfn "%s" utf32String // outputs "abc æøå ÆØÅ"
let bytesToInts (bytes: byte[]) = bytes |> Array.map (fun b -> int b)
let intsAsBytesToInts (bytes: byte[]) =
bytes |> Array.chunkBySize 4 |> Array.map (fun b4 -> BitConverter.ToInt32(b4,0))
let utf8Ints = bytesToInts utf8Bytes
printfn "%A" utf8Ints
// [|97; 98; 99; 32; 195; 166; 195; 184; 195; 165; 32; 195; 134; 195; 152; 195; 133|]
// Note: This reflects what the encoded UTF8 byte array looks like.
let utf32Ints = intsAsBytesToInts utf32Bytes
printfn "%A" utf32Ints
// [|97; 98; 99; 32; 230; 248; 229; 32; 198; 216; 197|]
// Note: This directly reflects the chars in the unicode string.