Как визуализировать байты с C/C++

Линия - это shadowImage. Его можно просто удалить, применив пустой UIImage. В соответствии с документацией, вы также должны установить пользовательское фоновое изображение :

- (void)viewDidLoad {
  [self.navigationController.navigationBar setBackgroundImage:[[UIImage alloc]init] forBarMetrics:UIBarMetricsDefault];
  self.navigationController.navigationBar.shadowImage = [[UIImage alloc ]init];
}

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

10
задан OhioDude 28 May 2009 в 13:06
поделиться

5 ответов

Вы можете использовать такую ​​функцию, чтобы напечатать байты:

void print_bytes(const void *object, size_t size)
{
  // This is for C++; in C just drop the static_cast<>() and assign.
  const unsigned char * const bytes = static_cast<const unsigned char *>(object);
  size_t i;

  printf("[ ");
  for(i = 0; i < size; i++)
  {
    printf("%02x ", bytes[i]);
  }
  printf("]\n");
}

Использование будет выглядеть так, например:

int x = 37;
float y = 3.14;

print_bytes(&x, sizeof x);
print_bytes(&y, sizeof y);

Это показывает байты как необработанные числовые значения в шестнадцатеричный формат, который обычно используется для таких «дампов памяти».

На случайной (возможно, даже виртуальной, насколько я знаю) машине Linux с процессором «Intel (R) Xeon (R)» это печатает:

[ 25 00 00 00 ]
[ c3 f5 48 40 ]

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

25
ответ дан 3 December 2019 в 14:35
поделиться

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

template<class T>
void bytePattern( const T& object )
{
    typedef unsigned char byte_type;
    typedef const byte_type* iterator;

    std::cout << "Object type:" << typeid( T ).name() << std::hex;
    std::for_each( 
        reinterpret_cast<iterator>(&object), 
        reinterpret_cast<iterator>(&object) + sizeof(T), 
        std::cout << constant(' ') << ll_static_cast<int>(_1 )&&0xFF );   
    std::cout << "\n";
}
0
ответ дан 3 December 2019 в 14:35
поделиться

попробуйте это:

MyClass* myObj = new MyClass();
int size=sizeof(*myObj);
int i;
char* ptr = obj; // closest approximation to byte
for( i=0; i<size; i++ )
    std::cout << *ptr << endl;

Ура,

младший.

-2
ответ дан 3 December 2019 в 14:35
поделиться

Большинство (визуальных) отладчиков имеют опцию «Просмотр памяти». IIRC, тот, что в Xcode, довольно прост, просто показывает байты в HEX и ASCII с переменной длиной строки. Visual Studio (Debug -> Windows-> Память в Vs2008) может форматировать шестнадцатеричную часть как целые числа различной длины или с плавающей запятой, изменять порядок байтов и отображать текст ANSI или UNICODE. Вы также можете установить любое число для ширины окна (I Думаю, xcode позволяет вам использовать только 64 байта). Другая IDE, которую я использую здесь, на работе, имеет много опций, хотя и не так много, как VS.

1
ответ дан 3 December 2019 в 14:35
поделиться

Если вы используете gcc и X, вы можете использовать отладчик DDD , чтобы нарисовать красивые картинки вашего структуры данных для вас.

5
ответ дан 3 December 2019 в 14:35
поделиться