Создаю дескриптор текстового файла 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);
Только надо понимать, что вы делаете и зачем. Иначе можно получить неприятностей на любящую приключения точку...
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
у меня так получилось
Можно ли в C++ объявить несколько переменных и сразу присвоить одинаковое значение? Пример:
Здравствуйте! У меня проблема с функцией для вывода объекта в SDL
Имеется DOM дерево, нужен рендер на OpenGl,в QtТак как, у HTML нет координат, а OpenGL рисует по координатам, не понимаю как это сделать, по смещениям атрибутов...