На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
  
> Заменить const string RazdLN = { 0x5, '9', '9', '9' }; #define RazdLN ... , Есть строка const string RazdLN = { 0x5, '9', '9', '9' }; надо вместо нее написать #define RazdLN ...
    Хотелось бы избавиться от глобальных переменных в программе, и даже констант.
    Сейчас есть строка:
    ExpandedWrap disabled
      const string RazdLN = { 0x5, '9', '9', '9' };

    Хотелось бы вместо нее записать
    ExpandedWrap disabled
      #define RazdLN ...

    Проблема в том, что первым символом в строке находится байт содержащий число 0х5.
    Сейчас все работает нормально, но попытки решить задачку пока не увенчались успехом.
      ExpandedWrap disabled
        '\x5'
      но желание заменить константу на #define настолько странное, что его можно сравнить с желанием заменить электрочайник на примус с консервной банкой.
        Цитата Dushevny @
        ExpandedWrap disabled
          '\x5'
        но желание заменить константу на #define настолько странное, что его можно сравнить с желанием заменить электрочайник на примус с консервной банкой.

        Ты не понял. Я могу написать:
        ExpandedWrap disabled
          #define RazdLN "999"

        Но первый байт 5, если я пишу:
        ExpandedWrap disabled
          #define RazdLN "\х5999"

        то транслятор говорит, что слишком длинная константа. Напиши твой вариант кода, пожалуйста.
          Цитата a_n_y_a @
          Напиши твой вариант кода, пожалуйста.

          ExpandedWrap disabled
            #define RazdLN "\005999"
            Цитата a_n_y_a @
            Ты не понял. Я могу написать:

            #define RazdLN "999"
            Да, что-то я ступил. Не обратил внимания на тип string, зацепился за инициализацию массивом char и решил, что тут нужнен массив без завершающего нуля на конце. Вот заодно и для себя что-то новое узнал тут:
            Цитата
            Hexadecimal escape sequences have no length limit and terminate at the first character that is not a valid hexadecimal digit. If the value represented by a single hexadecimal escape sequence does not fit the range of values represented by the character type used in this string literal (char, char16_t, char32_t, or wchar_t), the result is unspecified.

            Тогда как написал JoeUser: поскольку у вас следом идет допустипый для шестнадцатиричного числа символ '9' - придется перевести число в восьмеричную систему.
              Цитата a_n_y_a @
              Но первый байт 5, если я пишу:

              ExpandedWrap disabled
                #define RazdLN "\х5999"


              то транслятор говорит, что слишком длинная константа. Напиши твой вариант кода, пожалуйста.


              Еще подумал. Есть решение:
              ExpandedWrap disabled
                #define RazdLN "\х5""999"
                Цитата Dushevny @
                Еще подумал. Есть решение:
                ExpandedWrap disabled
                  #define RazdLN "\х5""999"

                Спасибо, все заработало.
                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script execution time: 0,0426 ]   [ 17 queries used ]   [ Generated: 28.03.24, 20:49 GMT ]