0

私は、asp.net (この段階では 2.0) に変換している従来の ASP サイトで古いハッシュ アルゴリズムを継承しました。

私の人生では、C#で一致するコードを記述できるほど古い関数に頭を悩ませることはできません。とても単純なことだと思いますが、現時点では木に森が見えません。

これは、文字列を受け取る元の古典的な asp コードです。同等の C# コードに関するヘルプをいただければ幸いです。

Function PHash( pValue )
           Dim dValue 
           Dim dAccumulator
           Dim lTemp 
           Dim sValue
           sValue = UCase(Trim("" & pValue))
           dAccumulator = 0
           For lTemp = 1 to Len(sValue)
              dValue = Asc(Mid(sValue, lTemp, 1))
              If (lTemp AND 1) = 1 Then
                 dAccumulator = Sin( dAccumulator  + dValue )
              Else
                 dAccumulator = Cos( dAccumulator  + dValue )
              End If
           Next
           dAccumulator = dAccumulator * CLng(10 ^ 9)
           PHash = CLng(dAccumulator)
End Function
4

3 に答える 3

0

このコードを使用できます。変換ツールを参照してください: http://www.developerfusion.com/tools/convert/vb-to-csharp/?batchId=dbded81a-54c9-4df5-aced-4db45773c842

  public object PHash(pValue)
  {
   dynamic dValue = null;
   dynamic dAccumulator = null;
   dynamic lTemp = null;
   dynamic sValue = null;
   sValue = Strings.UCase(Strings.Trim("" + pValue));
   dAccumulator = 0;
   for (lTemp = 1; lTemp <= Strings.Len(sValue); lTemp++) {
    dValue = Strings.Asc(Strings.Mid(sValue, lTemp, 1));
    if ((lTemp & 1) == 1) {
        dAccumulator = Sin(dAccumulator + dValue);
    } else {
        dAccumulator = Cos(dAccumulator + dValue);
    }
}
 dAccumulator = dAccumulator * Convert.ToInt64(Math.Pow(10, 9));
 return Convert.ToInt64(dAccumulator);
 }
于 2013-09-03T06:00:50.407 に答える
-1

翻訳は次のようになります。

public long PHash (string pValue)
{
    int dValue;
    double dAccumulator;
    int lTemp;
    string sValue;

    sValue = pValue.Trim().ToUpper();
    dAccumulator = 0;

    for (lTemp = 1; lTemp <= sValue.Length; lTemp ++)
    {
        dValue = (int)char.Parse(sValue.Substring(lTemp, 1));
        if ((lTemp % 1) == 1)
        {
            dAccumulator = Math.Sin(dAccumulator  + dValue);
        }
        else
        {
            dAccumulator = Math.Cos(dAccumulator  + dValue);
        }
    }
    dAccumulator = dAccumulator * (long)(10 ^ 9);
    return (long)(dAccumulator);
}

変換された関数は次のとおりです。 Trim: 文字列の左側と右側の両方のスペースを削除します。C# の場合: Trim()。UCase: 指定された文字列を大文字に変換します。C# の場合: ToUpper()。Mid: 文字列から指定された数の文字を返します。C# の場合: Substring()。Len: 文字列の文字数を返します。C# の場合: 長さ。CLng: long 型への単純なキャストです。Asc: char から int への単純なキャストとして解決されます。

于 2013-09-03T02:00:37.477 に答える