2010-09-04 3 views
5

Я объявил переменную uint8, и когда значение в ней напечатано, я получаю смайлики и белые пробелы. Не должно ли оно отображать целочисленные значения?uint8 отображает странные символы

+1

напишите свой код. – tenfour

+0

Я использую библиотеку от поставщика .. он возвращает тип uint8 – aks

+0

Вы пытаетесь напечатать его как строку, используя спецификатор формата '% s'? Попробуйте распечатать отдельные символы. – dirkgently

ответ

12

Держу пари, uint8 является typedef для unsigned char в заголовках систем. Затем std::cout << u будет печатать символы, а не целые значения, где u имеет тип uint8. Попробуйте

std::cout << static_cast<int>(u); 

или

std::cout << +u; 

иметь числовые значения, напечатанные.

+0

, но не будет ли это использовать для int32? – aks

+0

Да, это будет. Но в чем проблема? Это создает временную переменную int из переменной uint8 и передает ее в std :: cout для печати. – usta

+0

@Rajesh. Если вы печатаете в десятичной форме, считаете ли вы, что имеет значение, если значение хранится в uint8 или uint32 непосредственно перед его печатью? –

0

Все зависит от того, как вы печатаете значение. Для cout попробуйте cout << (long unsigned int)var;, а для printf вы можете попробовать использовать спецификатор формата %lu. Однако, как упоминалось выше, uint8, вероятно, определен или typedef'd как что-то еще, поскольку это не тип ISO C++. Существует также вероятность того, что uint8 typedef'd до unsigned long int (generic), или unsigned __int64 (специфичная для платформы MS), а компилятор MSVC++ просто выполняет неправильное неявное преобразование. Не зная, что такое uint8, трудно сказать.

+0

uint8 используется непосредственно ....> typedef uint8 _UINT1; В комментарии говорится: 1 байтовое целое число (как поставить серый блок вокруг кода?) – aks

+0

Ну, тогда '_UIN1;' скорее всего также определяется как что-то еще. Вы должны были бы следовать за typedef, пока не нажмете базовый внутренний тип (хотя '_UINT1', кажется, подразумевает один символ без знака, а не 64-битное число). Кроме того, вы можете указать текст как код (т. Е. «Серый квадрат»), обернув его в символы обратной цитаты. – Javert93

+0

typedef uint8 _UINT1; определяет _UINT1 как псевдоним uint8, а не наоборот. Поэтому вам придется искать typedef XXX uint8; чтобы узнать, что такое uint8. Или вы можете просто доверять мне, что это 8-разрядное целое без знака и является псевдонимом для unsigned char :). [u] Типы intN [_t] всегда означают N-разрядные целые числа, а не N-байтовые целые числа. – usta

Смежные вопросы