2014-01-16 1 views
-5

Любой хороший JScript код преобразователя на C# Я хочу, чтобы преобразовать этот кусок кода в C# Этот код для генерации администратора базы паролей из устройства MAC-адресJScript код C#

<script language="jscript"> 
    var add=[12,2,17,5,16,31,28,10,16,20,22,1]; 
    var subst={58:122,59:121,60:120,61:119,62:118,63:117,64:116,91:115,92:114,93:113,94:112,45:111,96:110}; 

    function generatePassword(input){ 
    var inputMac=input.replace(/:/g,"").toUpperCase(); 
    var macPassword=""; 
if((inputMac.search(/^[A-F0-9]{12}$/)==-1) || (inputMac =="000000000000")){ 
    return macPassword="invalid"} 
else{ 
    var b; 
    var a; 
    var c=""; 
    for(b=0;b<12;b++){ 
     a=inputMac.charCodeAt(b)+add[b]; 
     if(subst[a]){ 
      a=subst[a] 
     } 
     c+=String.fromCharCode(a) 
    } 
    return macPassword="2008"+c+""; 
    } 
}; 
</script> 
+0

Все функции, используемые выше, присутствуют в C#, вы сами пробовали кодирование !? –

+0

что эквивалентно этому на C#? Я смущаюсь по этим двум частям, я пытаюсь его кодировать. var add = [12,2,17,5,16,31,28,10,16,20,22,1]; var subst = {58: 122,59: 121,60: 120,61: 119,62: 118,63: 117,64: 116,91: 115,92: 114,93: 113,94: 112,45 : 111,96: 110}; – user1594906

+0

ну первый, как я вижу, это обычный массив int, и не знаете, что это в jscript? –

ответ

0

Я не знаю, любых конвертеров от JScript до C#, только наоборот. И у меня даже нет очень хорошего мнения. ИМО, слишком много языковых и рамочных особенностей для «транспиляции», чтобы работать очень хорошо.

Я не знаю, где вы нашли код, который вы опубликовали, поскольку на основе комментариев вы не знаете JScript. Я надеюсь, что вы лучше на C#, так что вы по крайней мере, понять преобразованную функцию:

public string GeneratePassword(string input) 
{ 
    var add= new byte[] {12,2,17,5,16,31,28,10,16,20,22,1}; 
    var subst = new Dictionary<byte, byte> {{58,122},{59,121},{60,120},{61,119},{62,118},{63,117},{64,116},{91,115},{92,114},{93,113},{94,112},{45,111},{96,110}}; 

    var inputMac = input.Replace(":", "").ToUpperInvariant(); 
    if (!Regex.IsMatch(inputMac, "^[A-F0-9]{12}$") || (inputMac == "000000000000")) 
    { 
     return "invalid"; 
    } 
    else 
    { 
     var c=""; 
     for(var b = 0; b < 12; b++) 
     { 
      var a = (byte)((byte)inputMac[b] + add[b]); 
      if(subst.ContainsKey(a)) 
      { 
       a=subst[a]; 
      } 
      c += (char)a; 
     } 
     return "2008" + c; 
    } 
} 

C# код может быть дополнительно улучшена, но я хотел бы сохранить его как можно ближе к оригиналу, насколько это возможно, так что вы можете узнать о различиях в конкретных конструкциях и сделать это самостоятельно в будущем, вместо того, чтобы просто использовать преобразованный код как есть.

Просто любопытно: на что вы собираетесь использовать эту функцию?

+0

спасибо. Оно работает. Я знаю, как преобразовать остальные, строки, которые меня путают, - это первые две строки, я не знаю, что именно такое в C#. – user1594906