2010-09-04 20 views
5

Bir uint8 değişkenini bildirdim ve içindeki değer yazdırıldığında gülen yüzler ve beyaz alanlar elde ediyorum. Tam sayı değerleri gösterilmemeli mi?uint8 tuhaf karakterleri görüntüler

+1

kodunuzu gönderin. – tenfour

+0

Bir satıcıdan bir kütüphane kullanıyorum..it bir uint8 türünü döndürür – aks

+0

'% s' biçim belirteci kullanarak bir dize olarak yazdırmaya mı çalışıyorsunuz? Bunun yerine tek tek karakterleri yazdırmaya çalışın. – dirkgently

cevap

12

Bahis uint8, unsigned char için sistem üstbilgilerinizde typedef olduğunu iddia ediyorum. Daha sonra std::cout << u, u türünde uint8 türünde tamsayı değerleri yerine semboller basacaktır.

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

veya

std::cout << +u; 

baskılı sayısal değerlere sahip çalışın .

+0

yazıyor ama int32'ye yayınlanmayacak mıyım? – aks

+0

Evet, olacak. Ama sorun ne? Bu, uint8 değişkeninizden geçici bir int oluşturur ve std :: cout yazdırma için bu int beslenir. – usta

+0

@Rajesh. Ondalık olarak yazdırıyorsanız, değer yazdırılmadan hemen önce bir uint8 veya bir uint32'de kayıtlıysa, herhangi bir fark yaratır mı? –

0

Her şey değeri nasıl yazdıracağınıza bağlıdır. Cout için cout << (long unsigned int)var;'u ve printf için %lu biçim belirtecini kullanmayı deneyebilirsiniz. Ancak, belirtildiği gibi, uint8 muhtemelen bir şey olarak tanımlanmış veya yazılmıştır, çünkü bu bir ISO C++ tipi değildir. uint8'un unsigned long int (jenerik) veya unsigned __int64 (MS platformuna özgü) olarak yazılma olasılığı vardır ve MSVC++ derleyicisi yanlış örtük dönüştürme işlemini gerçekleştirmektedir. uint8'un ne olduğunu bilmeden, anlatması zor.

+0

uint8 doğrudan kullanılıyor ....> typedef uint8 _UINT1; Yorumda, 1 byte tamsayı yazıyor (Kodun etrafında gri bir bloğu nasıl koyarım?) – aks

+0

Eh, sonra '_UIN1;' büyük olasılıkla başka bir şey olarak tanımlanır. Yazılan intrinsik türüne ulaşana kadar yazım kurallarını takip etmelisiniz ('_UINT1', 64 bitlik bir sayı değil, tek bir işaretsiz karaktere işaret ediyor gibi görünüyor). Ayrıca, metni arka alıntı karakterleriyle sarmalayarak kod olarak da (yani "gri kutu") belirtebilirsiniz. – Javert93

+0

typedef uint8 _UINT1; _UINT1'i uint8 ile diğer adı değil, diğer adıyla tanımlar. Yani bir typedef XXX uint8 aramak gerekir; uint8'in ne olduğunu bulmak için beyan. Ya da bana bir 8-bit işaretsiz tamsayı olduğunu ve imzasız char için bir takma ad olduğu konusunda güvenebilirsiniz :) [u] intN [_t] tipleri her zaman N-bayt tam sayıları değil, N-bit tam sayılarını belirtir. – usta