9

最初のプロジェクトとして、単純な rc4 暗号化/復号化ユーティリティを作成しています。指定された文字列を、コア アルゴリズムで操作できるバイトの配列に変換しようとすることに固執しています。関数型f#で文字列をバイト配列に変換するにはどうすればよいですか?

//From another thread
let private replace find (repl : string) (str : string) = str.Replace(find, repl)

//let private algorithm bytes = blah blah blah

let Encrypt (decrypted : string) =
    decrypted.Chars
    |> Array.map(fun c -> byte.Parse(c)) // This line is clearly not working
    // |> algorithm
    |> BitConverter.ToString
    |> replace "-" ""

参考までに、C# では次のようになります。

    public static string Encrypt(string decrypted)
    {
        byte[] bytes = new byte[decrypted.Length];

        for (int i = 0; i < decrypted.Length; ++i)
            bytes[i] = (byte)decrypted[i];

        Algorithm(ref bytes);

        return BitConverter.ToString(bytes).Replace("-", "").ToLower();
    }
4

3 に答える 3

11

ジョブを実行する独自の関数を作成することもできますが、組み込みの .NET メソッドを使用することをお勧めします。

文字列からバイトへ:

System.Text.Encoding.ASCII.GetBytes("hello world!")

文字列へのバイト数:

System.Text.Encoding.ASCII.GetString([|104uy; 101uy; 108uy; 108uy;
            111uy; 32uy; 119uy; 111uy; 114uy; 108uy; 100uy; 33uy|])
于 2009-07-21T21:18:59.783 に答える
1

あなたは直接翻訳を行うことができます

let Encrypt(decrypted : string) =
    let bytes = Array.init decrypted.Length (fun i -> byte decrypted.[i])
    Algorithm(ref bytes)
    BitConverter.ToString(bytes).Replace("-", "").ToLower()
于 2009-07-21T21:25:33.340 に答える