c++, структура reinterpret_cast* в unsigned char*

Сначала извиняюсь за свой английский :) Итак, у меня есть структура и переменная

typedef struct
{
  GHEADER  m_Header;
  BYTE    *m_Buf;
  Addr    *m_Abonent;
}__attribute__((packed)) PACKET;

unsigned char* uc_ptr;

Мне нужно отправить какой-либо функции аргумент указателя без знака char. Я пытался использовать reinterpret_cast для приведения указателя типа PACKET к типу unsigned char*.

PACKET* t_PACKET;
uc_ptr = reinterpret_cast<unsigned char*>(t_PACKET);

Но потом я попытался

std::cout << *uc_ptr << std::endl;

Я ничего не вижу. Почему? И как это правильно залить?


person user1861137    schedule 28.11.2012    source источник
comment
Потому что это, скорее всего, не имеет особого смысла. Это должно быть решено с помощью чего-то другого, кастинг не для этой цели.   -  person    schedule 29.11.2012
comment
Что вы ожидаете увидеть?   -  person Pubby    schedule 29.11.2012


Ответы (1)


Когда вы используете << для вывода char, вы получаете один символ, записанный на выходе. Многие символы, такие как \0, не отображаются на консоли.

Вместо этого попробуйте это, чтобы понять, что я имею в виду:

std::cout << static_cast<unsigned int>(*uc_ptr) << std::endl;

Вам понадобится цикл, чтобы получить все байты в структуре.

person Mark Ransom    schedule 28.11.2012
comment
@ user1861137, это означает, что первый байт вашей структуры равен нулю, как я и подозревал. Это символ NUL, который не будет отображаться в консоли. Если вы можете более подробно рассказать о том, чего вы пытаетесь достичь, я мог бы помочь еще немного. - person Mark Ransom; 29.11.2012
comment
Как я могу получить все байты в структуре? Может быть что-то вроде этого while (i ‹ sizeof(PACKET)){ std::cout ‹‹ static_cast‹unsigned int›(*uc_ptr) ‹‹ std::endl; ++я; } но это не работает. Только 0 - person user1861137; 29.11.2012
comment
@ user1861137, используйте uc_ptr[i] вместо *uc_ptr в своем цикле. - person Mark Ransom; 29.11.2012
comment
О, пора спать... Большое спасибо! - person user1861137; 29.11.2012