На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
Страницы: (8) « Первая ... 5 6 [7] 8  все  ( Перейти к последнему сообщению )  
> Класс-обертка на чистом С++ , Для использования Ф-ий DLL
    Цитата kms @
    теперь бы остальные типы данных по правельному распознать

    Там остальное вроде более-менее нормально
      Олег М посмотри пожалуйста хоть краем глаза , вот это правильно
      ExpandedWrap disabled
        .......
                            case HSCLI_ET_CHAR: // 0 Массив символов длиной не более заданной
                            {
                                std::string s(p, Query1.GetColumnsInfo(j)->len );
                                std::cout << s.c_str() << "  ";
                            }
                            break;
         
                            case HSCLI_ET_ARRA: // 1 Массив байтов заданной длины
                                std::cout << *reinterpret_cast<unsigned char *>(p) << "  ";
                                break;
         
                            case HSCLI_ET_BYTE:   // 2 Элемент - unsigned char (короткое целое)  short
                                    std::cout << *reinterpret_cast<unsigned char *>(p) << "  " ;
                                                break;
         
                             .......
          
         
                            case HSCLI_ET_NMBR: {//6  Номер   - 3-х байтовое целое без знака  
                                                 // std::cout << *reinterpret_cast<  *>(p);
                                                 //dR[j] = ;
                            }
                                                break;
         
                             .......
        Цитата kms @
        Олег М посмотри пожалуйста хоть краем глаза , вот это правильно

        Что именно?
          вот это все
          ExpandedWrap disabled
            case HSCLI_ET_CHAR: // 0 Массив символов длиной не более заданной
                                {
                                    std::string s(p, Query1.GetColumnsInfo(j)->len );
                                    std::cout << s.c_str() << "  ";
                                }
                                break;
             
                                case HSCLI_ET_ARRA: // 1 Массив байтов заданной длины
                                    std::cout << *reinterpret_cast<unsigned char *>(p) << "  ";
                                    break;
             
                                case HSCLI_ET_BYTE:   // 2 Элемент - unsigned char (короткое целое)  short
                                        std::cout << *reinterpret_cast<unsigned char *>(p) << "  " ;
                                                    break;
             
                                 .......
             
             
                                case HSCLI_ET_NMBR: {//6  Номер   - 3-х байтовое целое без знака  
                                                     // std::cout << *reinterpret_cast<  *>(p);
                                                     //dR[j] = ;
                                }
                                                    break;
            Олег М а еще можешь глянуть возможноли в Линухе вот это подключить
            Прикреплённый файлПрикреплённый файлphplinux.7z (81,76 Кбайт, скачиваний: 66)
              Цитата kms @
                                  case HSCLI_ET_ARRA: // 1 Массив байтов заданной длины
                                      std::cout << *reinterpret_cast<unsigned char *>(p) << "  ";
                                      break;

              std::vector<char> arr(p, p + Query1.GetColumnsInfo(j)->len);
              std::cout << arr.size() << std::endl;
              break;
                Цитата Олег М @
                std::vector<char> arr(p, p + Query1.GetColumnsInfo(j)->len);
                std::cout << arr.size() << std::endl;
                break;

                ОК пробую
                  что то не так
                  вот такую таблицу
                  ExpandedWrap disabled
                    table "TAB4"(
                      ID         dword      surrogate,
                      IDD        array(10)  nonkey,
                      BIT        byte       nonkey,
                      TIPLONG    long       nonkey,
                      TIPDOUBLE  double     nonkey,
                      DATE       date       nonkey,
                      KPS        word       nonkey,
                      USRKEY     dword      nonkey,
                      ADDR       char(255)  nonkey
                    );

                  показывает вот так
                  Прикреплённая картинка
                  Прикреплённая картинка
                    а должно быть вот такие данные
                    Прикреплённая картинка
                    Прикреплённая картинка


                    Добавлено
                    не идет array(10) вторая колонка
                    и byte третья колонка
                      Цитата kms @
                      а должно быть вот такие данные

                      А что именно не так?
                        byte третья колонка преобразуется вот
                        ExpandedWrap disabled
                          case HSCLI_ET_BYTE:   // 2 Элемент - unsigned char (короткое целое)  short
                                  std::cout << *reinterpret_cast<unsigned char *>(p) << "  " ;
                              break;

                        но видать не правильно

                        Добавлено
                        вот
                        не идет array(10) вторая колонка
                        и byte третья колонка

                        Добавлено
                        ну array(10) вторая колонка вот тут преобразование
                        ExpandedWrap disabled
                          case HSCLI_ET_ARRA: { // 1 Массив байтов заданной длины
                                                   //std::cout << *reinterpret_cast<unsigned char *>(p) << "  ";
                                                  std::vector<char> arr(p, p + Query1.GetColumnsInfo(j)->len)   ;
                                                  std::cout << arr.size() << " " ;
                                              }
                                                           break;
                          Цитата kms @
                          std::cout << *reinterpret_cast<unsigned char *>(p) << "  " ;

                          Сделай std::cout << uint32_t(*reinterpret_cast<unsigned char *>(p)) << "  " ;

                          Добавлено
                          Цитата kms @
                          не идет array(10) вторая колонка

                          Массив и не пойдёт, надо делать специальную функцию, чтоб его распечатать

                          Добавлено
                          Что-то типа

                          ExpandedWrap disabled
                                static void FormatBinary(std::ostream &out, const uint8_t *data, size_t sz, const bool raw = false)
                                {
                                    if (!sz || !data)
                                        return;
                             
                                    const size_t _n = (raw? sizeof("'\\xXX',"): sizeof("XX")) - 1;
                                    char buf[(sz * _n) + 1];
                             
                                    char *psz = buf;
                                    for (auto end = data + sz; data != end; ++data, psz += _n)
                                        sprintf(psz, raw? "'\\x%02X',": "%02X", *data);
                             
                                    out << buf;
                                }
                            Цитата Олег М @
                            Сделай std::cout << uint32_t(*reinterpret_cast<unsigned char *>(p)) << "  " ;

                            ухты волшебство , ОК третья колонка пошла

                            Добавлено
                            Цитата Олег М @
                            Массив и не пойдёт, надо делать специальную функцию, чтоб его распечатать

                            понял пробую делаю
                              сделал вот так
                              ExpandedWrap disabled
                                static void FormatBinary(std::ostream &out, const uint8_t *data, size_t sz, const bool raw = false)
                                {
                                     if (!sz || !data)
                                        return;
                                 
                                     const size_t _n = ( raw ? sizeof("'\\xXX',") : sizeof("XX")    ) - 1;
                                     //char buf[(sz * _n) + 1];
                                     char *buf  = new char[(sz * _n) + 1];
                                     char *psz = buf;
                                     for (auto end = data + sz; data != end; ++data, psz += _n)
                                        sprintf(psz, raw ? "'\\x%02X'," : "%02X", *data);
                                 
                                     out << buf;
                                }


                              но ошибка
                              ExpandedWrap disabled
                                 
                                ОшибкаC2572FormatBinary: переопределение параметра по умолчанию: параметр 1HyTech \main.cpp118
                                Цитата Олег М @
                                Что-то типа


                                    static void FormatBinary(std::ostream &out, const uint8_t *data, size_t sz, const bool raw = false)
                                    {
                                        if (!sz || !data)
                                            return;
                                 
                                        const size_t _n = (raw? sizeof("'\\xXX',"): sizeof("XX")) - 1;
                                        char buf[(sz * _n) + 1];
                                 
                                        char *psz = buf;
                                        for (auto end = data + sz; data != end; ++data, psz += _n)
                                            sprintf(psz, raw? "'\\x%02X',": "%02X", *data);
                                 
                                        out << buf;
                                    }

                                вообщем так и не смог я завести эту функцию


                                сделал вот так , только вывод идет символов , надо преобразовать каждый символ в шестнадцатеричное число
                                ExpandedWrap disabled
                                  case HSCLI_ET_ARRA: { // 1 Массив байтов заданной длины
                                                           std::vector<char> arr(p, p + Query1.GetColumnsInfo(j)->len  ) ;
                                                           for (int i = 0; i < arr.size(); i++)
                                                               stream << arr[i] << " ";
                                                      }
                                                                   break;
                                Сообщение отредактировано: kms -
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,1054 ]   [ 23 queries used ]   [ Generated: 27.04.24, 02:10 GMT ]