Как преобразовать адрес указателя в массив без знака? - PullRequest
1 голос
/ 16 декабря 2010

У меня есть адрес или указатель на объект.

Как мне преобразовать адрес в массив без знака? Я использую его как ссылку для транспорта с использованием сокетов. Спасибо.

Ответы [ 5 ]

2 голосов
/ 16 декабря 2010
Object * pObject = ...;
unsigned char * pSz = reinterpret_cast<unsigned char *>(pObject);
// thru pSz you can see your object blindly as a pointer of unsigned char
// (the first char is pointed)

//and only if you know the size of your object (sizeObject) you can do this:
unsigned char pArray[sizeObject] = pSz;

Будьте очень осторожны если вы когда-либо используете полиморфизм, унаследованные объекты могут иметь совершенно разные размеры, чем у родительского класса Object;

2 голосов
/ 16 декабря 2010

Если тип полностью не связан (что, очевидно, так и есть), вам, вероятно, понадобится reinterpret_cast.

1 голос
/ 16 декабря 2010
unsigned char *array = reinterpret_cast<unsigned char*>(my_obj);

Однако вы не должны отправлять свои объекты, просто обрабатывая их как байтовый массив. Там есть некоторые данные, такие как адреса методов, которые будут бесполезны после отправки по сети.

1 голос
/ 16 декабря 2010
void *your_pointer;
unsigned char *new_pointer = (unsigned char*) your_pointer;

Поскольку ваш вопрос помечен C ++, могу ли я также предложить вам не конвертировать указатели вокруг, а вместо этого попробовать использовать библиотеку высокого уровня?Qt предоставляет отличную платформу для сокетов, и, вероятно, и boost.

0 голосов
/ 16 декабря 2010
void* ptr; // Could be any type of course
ptr = something();
int n = sizeof(ptr);
unsigned char arr = new unsigned char[n];
memcpy((void*)arr[0], (void*)ptr, n);
// Remember to delete [] the array
...