Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Непонятно с cout<<BYTE[] и cout<<unsigned char[], Эти типы использую в RegQueryValueEx  
V
    Опции темы
EgoBrain
Дата 30.4.2012, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 23.3.2008
Где: Комната

Репутация: нет
Всего: 2



Здравствуйте.
Не смог сам разобраться, помогите понять.
Функция WinAPI RegQueryValueEx имеет 6 параметров, 5-ый - буфер для записи результата типа PBYTE (указатель на BYTE)
Цитата

typedef unsigned char BYTE;   // 8-bit unsigned entity.
typedef BYTE *        PBYTE;  // Pointer to BYTE.

BYTE Ch;                      // Declare a variable of type BYTE.
PBYTE pbCh;                   // Declare a pointer to a BYTE
                              //  variable.

То есть получается PBYTE == unsigned char*, которые в моем случае указывают на массивы. Собственно в чем вопрос: Почему получаются разные выводы cout BYTE[] и unsigned char[].
Вот пример (time - ключи реестра REG_WORD = (dec)45):
Код

        HKEY rKey;
    
    DWORD bSize;
    PBYTE rData;
        
    RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"SOFTWARE\\ttk", 0, KEY_QUERY_VALUE, &rKey);
    
    RegQueryValueEx(rKey, L"time", NULL, NULL, NULL, &bSize);
    unsigned char* pBuff = new unsigned char[bSize];
    rData = new BYTE[bSize];
    RegQueryValueEx(rKey, L"time", NULL, NULL, pBuff, &bSize);
    
    unsigned int i = 0;

    while(i < bSize)
    {
        cout<<(int)pBuff[i];
        i++;
    }

    RegQueryValueEx(rKey, L"time", NULL, NULL, rData, &bSize);
    cout<<endl<<(DWORD)*rData;

    RegCloseKey(rKey);


Цитата

45000
45


P.S. Если модератор сделает название и описание темы более соответсвующими вопросу буду только рад! Извините, сам не смог.
PM MAIL ICQ Skype   Вверх
volatile
Дата 30.4.2012, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 16
Всего: 85



Цитата(EgoBrain @  30.4.2012,  09:35 Найти цитируемый пост)
  while(i < bSize)
    {
        cout<<(int)pBuff[i];
        i++;
    }

Здесь выводится 4 байта
Цитата(EgoBrain @  30.4.2012,  09:35 Найти цитируемый пост)
45000

фактически вывод идет так: 45, 0, 0, 0

Цитата(EgoBrain @  30.4.2012,  09:35 Найти цитируемый пост)
 cout<<endl<<(DWORD)*rData;

а здесь вы выводите только 1-ый байт

Цитата(EgoBrain @  30.4.2012,  09:35 Найти цитируемый пост)
Собственно в чем вопрос: Почему получаются разные выводы cout BYTE[] и unsigned char[].

Причем здесь типы, если вы их выводите разными способами?
Напишите цикл во 2 случае, и будет также.


Это сообщение отредактировал(а) volatile - 30.4.2012, 11:22
PM MAIL   Вверх
EgoBrain
Дата 30.4.2012, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 23.3.2008
Где: Комната

Репутация: нет
Всего: 2



volatile, спасибо понял. Просто запутался и не увидел что дело в цикле.
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0423 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.