Создаю дескриптор текстового файла HANDLE file = CreateFile(...);, успешно с ним работаю.
Так вот...я могу отправить этот "file" в cout, и увижу в консоли примерно такое сообщение: 00000000000002C0. Это всё понятно.
Но никак не могу с такой же легкостью сохранить это значение в какой-либо переменной, например, в string или массиве символов char. Как это реализовать?
Кто что может сказать по этому поводу?
//1 вариант
char str[64]; //про запас
sprintf(str, "%p", file);
//2 вариант
std::stringstream ss;
ss << static_cast<void*>(file);
std::string value = ss.str();
Можно совершить поиск в заголовочных файлах и обнаружить там
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);
Только надо понимать, что вы делаете и зачем. Иначе можно получить неприятностей на любящую приключения точку...
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости