Si ce que vous essayez de faire est de crypter une chaîne unicode, vous pouvez utiliser les fonctions .NET pour convertir les chaînes en tableaux d'octets, qu'ils soient UTF8 ou UTF32. L'UTF8 est plus économe en mémoire sous forme d'octets, mais si vous devez stocker les caractères sous forme d'ints un par un, le passage par l'UTF32 permettra d'obtenir moins d'ints. Notez que l'utilisation de l'encodage ASCII ne préservera pas les caractères unicode.
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.