indyarock Ответов: 1

Разговор кода с++ на C#


Привет,

может ли кто-нибудь помочь мне преобразовать приведенный ниже код C++ в c#
застрял с нижней линией:
sOutString.Format(_T("%s %s"), sTimeStamp, sBoardIdentNumber);

Оригинал:
{
  int i, len;
  unsigned char acBuffer[64];
  CString sOutString;
  static char acOut[180];
  sOutString.Format( _T("%s %s"), sTimeStamp, sBoardIdentNumber);
  len = sOutString.GetLength();
 	for( i = 0; i<len; i++)
		acBuffer[i] = sOutString.GetAt(i);
  acBuffer[len] = 0;

  long lCRC = CalculateCRC32( acBuffer, len );
  _snprintf_s(acOut, sizeof(acOut), "%8x", lCRC );

  len = strlen(acOut);
	for( i = 0; i<len; i++)
		acOut[i] = toupper(acOut[i]);

  return acOut;
}


Что я уже пробовал:

эквивалентный C# я пробовал:
{
      int len;
      byte[] acBuffer = new byte[64];
      string sOutString = null;
      char[] acOut = new char[180];
      //sOutString.Format(_T("%s %s"), sTimeStamp, sBoardIdentNumber);

      len = sOutString.Length;
      for(int i = 0;i < len;i++)
      {
        acBuffer[i] = (byte)sOutString[i];
      }
      acBuffer[len] = 0;

      long lCRC = CalculateCRC32(acBuffer, len);

      len = acOut.Length;
      for (int i = 0; i < len; i++)
      {
        acOut[i] = char.ToUpper(acOut[i]);
      }       

      return acOut;
    }

1 Ответов

Рейтинг:
4

OriginalGriff

Попробуй:

sOutString = String.Format("{0} {1}", sTimeStamp, sBoardIdentNumber);


indyarock

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

_snprintf_s(acOut, sizeof(acOut), "%8x", lCRC );

OriginalGriff

Его нет: строки C# не работают с нулевым Терминатором.
Если вы пытаетесь преобразовать длинную шестнадцатеричную строку в 8 символов в верхнем регистре, то просто используйте ToString:

длинный v = 12345678;
строка s = v. ToString ("X8");

даст вам "00BC614E"и также устранит вашу петлю.
Сделайте себе одолжение: построчные переводы любого языка на другой обычно не дают хорошего кода, каким бы хорошим он ни был в оригинале. Это особенно актуально для "старомодного" C++ и C#, поскольку последний использует .NET framework, который автоматизирует многое из того, что должно быть ручным без него.
Если вы извлекаете код из интернета и пытаетесь его перевести, имейте в виду, что это может быть не лучший способ сделать что-то!

indyarock

Спасибо :)
это помогло