2017-10-31 14 views
-2

以下のcコードは、vsprintfを使用して、char配列をintに変換します。私はC#でどのようにこれを行うだろうか?私は、intにC#の文字列をキャストしようとし、その後、値を追加するが、戻り値の結果は同じではありません。 私のC#コードは、Cコードが(3224115)C# - Vsprintf equivilant?CharをIntに変換する

C#コード最後に考え出し

var astring = "123"; 
     int output = 0; 
     foreach(char c in astring){ 
      var currentChar = (int)c; 
      output += c; 
     } 
//output = 150 

Cコード

void vout(char *string, char *fmt, ...);           
char fmt1 [] = "%d";             

int main(void)                 
{                    
    char string[32];                

    vout(string, fmt1, '123');  //output is 3224115        
    printf("The string is: %s\n", string);          
}                    
void vout(char *string, char *fmt, ...)           

{                    
    va_list arg_ptr;                

    va_start(arg_ptr, fmt);              
    vsprintf(string, fmt, arg_ptr);            
    va_end(arg_ptr);                
} 
+0

あなたは、C#の試み –

+0

'string.Format'または補間された文字列' $ "{yourValue}" ' –

+1

何の問題あなたが解決しようとしているを投稿する必要があります。 –

答えて

0

と同様に同じ値を返す必要があります。ビットクリーナーかもしれませんが、動作し、Cコードと同じ出力を得ます。

public static ulong getAsciiLiteral(string x) 
{ 
    int len = x.Length; 
    string[] strArray = new string[32]; 
    byte[] finalByte = new byte[32]; 
    int i = 0; 
    int i2 = 0; 
    int i3 = 0; 
    int offset = 0; 
    var hexFinalString = "0x"; 
    var bytes = Encoding.ASCII.GetBytes(x); 

    if(len >= 5) 
    { 
     while (true) 
     { 
      if (4 + i3 == len) 
      { 
       offset = i3; 
       break; 
      } 
      else 
      { 
       i3++; 
      } 
     } 

    } 


    foreach (byte b in bytes) 
    { 
     strArray[i] = b.ToString("X2"); 
     i++; 
    } 
    i = 0; 
    i3 = 0; 
    while (i3 < len - 1) 
    { 



     hexFinalString += strArray[offset]; 
     offset++; 
     i3++; 
    } 


    var ret = Convert.ToUInt64(hexFinalString, 16); 
    return ret; 

}