Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Небольшой вопрос про конвертирование DWORD->char*  (Прочитано 13530 раз)
0 Пользователей и 7 Гостей смотрят эту тему.
FallenSoul
Опытный

ru
Offline Offline
Пол: Мужской

« : 15-04-2008 20:49 » new

Доброе время суток читающим и помогающим.

Получаю данные в типах DWORD(к примеру). Хочу посмотреть их в окне, но не могу найти функции конвертирование в char* (на msdn и в поиске плохо с переводом из такого типа- постоянно темы про string->char*).
Записан
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 15-04-2008 20:57 » 

Наверное, если уж речь идёт о DWORD, то так проще всего:
Код:
CString str;
DWORD dwSomeValue = 12345;
str.Format("%d", dwSomeValue);

можно sprintf или itoa, конечно, использовать... Улыбаюсь
« Последнее редактирование: 15-04-2008 20:59 от Вад » Записан
FallenSoul
Опытный

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 15-04-2008 21:04 » 

Ммм ...
Код:
 error C2065: 'CString' : undeclared identifier
:\
Записан
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 15-04-2008 21:18 » 

Ну да, это ATL/MFC-тип. Нужно включать отдельно. #include <atlstr.h>, если не ошибаюсь.
Записан
FallenSoul
Опытный

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 15-04-2008 21:48 » 

Попробую спросить по другому ...
Код:
DWORD Type;
void *pDataBin=malloc(1);
RegEnumValue(hKey_FillValue,id,ValueName,&szValueName,NULL,&Type,(u_char*)pDataBin,&szData);

В (char*)pDataBin записывается текстовое значение "переменной" ключа. Если это путь/строка- всё прекрасно отображается, но если это какое-либо число, то соответственно на экране не распознающиеся символы.

Что касалось типа переменной ключа(поле Type), то сделал соответствующие друг другу массивы DWORD<->char*,а как сдесь осуществлять перевод  в число(десятич., шестнадцатирич.)- не знаю.

p.s. atlstr.h was not found
« Последнее редактирование: 15-04-2008 21:49 от FallenSoul » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #5 : 16-04-2008 03:25 » 

FallenSoul, DWORD - максимум 8 хекс-цифр, 10 десятичных.


Код:
char txt[256];
txt[0]=0;

DWORD dwd=...;

sprintf(txt,"%d",dwd);//десятичное
sprintf(txt,"%x",dwd);//хекс с мелкими буквами
sprintf(txt,"%X",dwd);//хекс с большими буквами

----------

а из десятичной строки в число:

dwd=atoi(txt);

ну а из хекса сам, думаю, легко сделаешь Улыбаюсь

----------------
а отдельно от MFC не удастся CString попользовать


Записан

Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #6 : 16-04-2008 03:53 » 

............
Код:
RegEnumValue(hKey_FillValue,id,ValueName,&szValueName,NULL,&Type,(u_char*)pDataBin,&szData);
В (char*)pDataBin записывается текстовое значение "переменной" ключа. Если это путь/строка- всё прекрасно отображается, но если это какое-либо число, то соответственно на экране не распознающиеся символы.
............

Тут явно, что-то не так написано.
Давайте вместе подумаем.
И так для строк у нас в pDataBin строка в szData длинна строки, откуда знаем, да потому что на экране это выглядит, как строка в  Type при этом лежит(REG_SZ) указание, что считали мы имено строку.
Для не строк например, DWORD, вы ожидаете, что там будет лежать текстовое представление числа, но оно какое-то кривое и отображается не так как нам хочется. Почему? Допустим, там не текстовое представление числа, а бинарное представление, тогда значится делаем так
Код:
RegEnumValue(hKey_FillValue,id,ValueName,&szValueName,NULL,&Type,(u_char*)pDataBin,&szData);
if (Type == REG_DWORD)
{
    // можно еще размер на всякий случай померить
    DWORD val = * reinterpret_cast<DWORD*>(pDataBin);
    std::cout << "val =" << val << std::endl;
}

вроде как это должно работать.
Записан

Странно всё это....
FallenSoul
Опытный

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 16-04-2008 07:28 » 

Алексей1153++, LogRus, Спасибо, очень помогли! Улыбаюсь Дело близится к концу
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines