Тип HANDLE. Как значение дескриптора записать в строку?

381
26 ноября 2016, 19:00

Создаю дескриптор текстового файла HANDLE file = CreateFile(...);, успешно с ним работаю. Так вот...я могу отправить этот "file" в cout, и увижу в консоли примерно такое сообщение: 00000000000002C0. Это всё понятно.

Но никак не могу с такой же легкостью сохранить это значение в какой-либо переменной, например, в string или массиве символов char. Как это реализовать?

Кто что может сказать по этому поводу?

Answer 1
//1 вариант
char str[64]; //про запас
sprintf(str, "%p", file);
//2 вариант
std::stringstream ss;
ss << static_cast<void*>(file);  
std::string value = ss.str(); 
Answer 2

Можно совершить поиск в заголовочных файлах и обнаружить там

typedef void* HANDLE;

Т.е. HANDLE - не что иное как void*.

Можно воспользоваться средствами C++ и вывести этот тип:

cout << typeid(HANDLE).name() << endl;

Вы увидите

void *

Т.е. ваш HANDLE - это просто указатель, и с ним можно делать все, что с обычным указателем. Только отдавая себе отчет, что и зачем :)

В строке его можно хранить, переведя в соответствующее строковое представление. Типа

char s[20];
HANDLE h;
sprintf(s,"%p",h);

Или даже просто как исходную последовательность байт:

unsigned char s[4];
HANDLE h;
memcpy(s,&h,sizeof(h));

В переменных типа int - конечно, если размеры позволяют (в 64-разрядном мире void* - 8 байт) - с помощью явного приведения типов reinterpret_cast

HANDLE f;
int g = reinterpret_cast<int>(f);

Только надо понимать, что вы делаете и зачем. Иначе можно получить неприятностей на любящую приключения точку...

READ ALSO
Иницилизация нескольких переменных

Иницилизация нескольких переменных

Можно ли в C++ объявить несколько переменных и сразу присвоить одинаковое значение? Пример:

216
Проблемы с отрисовкой в SDL и ошибка SIGSEGV

Проблемы с отрисовкой в SDL и ошибка SIGSEGV

Здравствуйте! У меня проблема с функцией для вывода объекта в SDL

243
Рендеринг HTML Qt [закрыто]

Рендеринг HTML Qt [закрыто]

Имеется DOM дерево, нужен рендер на OpenGl,в QtТак как, у HTML нет координат, а OpenGL рисует по координатам, не понимаю как это сделать, по смещениям атрибутов...

247