2013-07-29 5 views
0

Здравствуйте все,Преобразование C# код на C++: Hex в двоичный

У меня есть C# код, и хотел бы, чтобы преобразовать его в C++. Я пытался и googling для нескольких разных способов, но есть ли некоторые простые исправления для этого фрагмента кода, чтобы сделать его совместимым с C++? Я новичок в C++:

static std::string Hex2Bin(std::string sHexavalue) 
    { 

     std::string binaryValue = ""; 
     char charArray[] = sHexavalue::toupper.ToCharArray(); 

     for(int n=0; n < sHexavalue.length(); n++) 
     { 
      switch (charArray[n]) 
      { 

         case '0': 
          binaryValue += "0000";break; 
         case '1': 
          binaryValue += "0001";break; 
         case '2': 
          binaryValue += "0010";break; 
         case '3': 
          binaryValue += "0011";break; 
         case '4': 
          binaryValue += "0100";break; 
         case '5': 
          binaryValue += "0101";break; 
         case '6': 
          binaryValue += "0110";break; 
         case '7': 
          binaryValue += "0111";break; 
         case '8': 
          binaryValue += "1000";break; 
         case '9': 
          binaryValue += "1001";break; 
         case 'A': 
          binaryValue += "1010";break; 
         case 'B': 
          binaryValue += "1011";break; 
         case 'C': 
          binaryValue += "1100";break; 
         case 'D': 
          binaryValue += "1101";break; 
         case 'E': 
          binaryValue += "1110";break; 
         case 'F': 
          binaryValue += "1111";break; 

      } 

     } 


     return binaryValue; 



    } 

Моя ошибка возникает, когда у меня есть sHexavalue быть изменен в верхний регистр и ToCharArray. Я получаю эту ошибку: IntelliSense: инициализация с «{...}» ожидается для совокупного объекта

Итак, я знаю, что все еще есть «конверсия» с C# на C++, но мне просто нужно знать, возможно ли иметь фрагмент, преобразованный в простой простой способ.

EDIT: Вот оригинальный источник:

//convert a Hexa value string to a binary value string 
public static string Hex2Bin(string sHexavalue) 
    { 
     string binaryValue = ""; 
     char[] charArray = sHexavalue.ToUpper().ToCharArray(); 

      for(int n=0; n < sHexavalue.Length; n++) 
      { 
       switch (charArray[n]) 
       { 
        case '0': 
         binaryValue += "0000";break; 
        case '1': 
         binaryValue += "0001";break; 
        case '2': 
         binaryValue += "0010";break; 
        case '3': 
         binaryValue += "0011";break; 
        case '4': 
         binaryValue += "0100";break; 
        case '5': 
         binaryValue += "0101";break; 
        case '6': 
         binaryValue += "0110";break; 
        case '7': 
         binaryValue += "0111";break; 
        case '8': 
         binaryValue += "1000";break; 
        case '9': 
         binaryValue += "1001";break; 
        case 'A': 
         binaryValue += "1010";break; 
        case 'B': 
         binaryValue += "1011";break; 
        case 'C': 
         binaryValue += "1100";break; 
        case 'D': 
         binaryValue += "1101";break; 
        case 'E': 
         binaryValue += "1110";break; 
        case 'F': 
         binaryValue += "1111";break; 

       } 

      } 
     return binaryValue; 
    } 
+0

[Это оригинал C# код?] (Http://pastebin.com/RkzdKnE4) – Borgleader

+0

@Borgleader, нет, это не так. Я пытаюсь преобразовать сейчас и теперь могу предоставить фактическое редактирование. – user2577497

ответ

2

Рассмотрим некоторые предложения:

  1. Поскольку sHexValue является только для чтения входных параметров, проходят по константной ссылке (const &):

    std::string Hex2Bin(const std::string & sHexValue) 
    

    (Это не более эффективно, чем прохождение std::string по значению.)

  2. Нет необходимости выполнять преобразование ToCharArray() C# в C++.
    Вы можете получить доступ к одному char s в std::string, используя operator[].

  3. Вы можете управлять верхним и нижним регистром для A-F с использованием нескольких case падения просвечивания:

    case 'A': case 'a': .... break; // valid for both 'A' and 'a' 
    

Вот можно переписать в C++:

// Convert a hex value string to a binary value string. 
std::string Hex2Bin(const std::string & sHexValue) 
{ 
    std::string binaryValue; // automatically initialized to empty string 

    for (int n = 0; n < sHexValue.size(); ++n) 
    { 
     switch (sHexValue[n]) 
     { 
      case '0': 
       binaryValue += "0000"; break; 
      case '1': 
       binaryValue += "0001"; break; 
      case '2': 
       binaryValue += "0010"; break; 
      case '3': 
       binaryValue += "0011"; break; 
      case '4': 
       binaryValue += "0100"; break; 
      case '5': 
       binaryValue += "0101"; break; 
      case '6': 
       binaryValue += "0110"; break; 
      case '7': 
       binaryValue += "0111"; break; 
      case '8': 
       binaryValue += "1000"; break; 
      case '9': 
       binaryValue += "1001"; break; 
      case 'A': case 'a': 
       binaryValue += "1010"; break; 
      case 'B': case 'b': 
       binaryValue += "1011"; break; 
      case 'C': case 'c': 
       binaryValue += "1100"; break; 
      case 'D': case 'd': 
       binaryValue += "1101"; break; 
      case 'E': case 'e': 
       binaryValue += "1110"; break; 
      case 'F': case 'f': 
       binaryValue += "1111"; break; 
     } 
    } 

    return binaryValue; 
} 
+0

Ничего себе, это было отличное решение! Спасибо вам огромное. Я уже сходил с ума. Ты потрясающий. Я смог легко скомпилировать. Я ценю все ваши предложения :) – user2577497

+0

@ user2577497: Добро пожаловать. –

+0

@ Mr.C64: почему вы оставили инструкцию 'switch' и не использовали таблицу поиска? –

Смежные вопросы