2010-09-04 37 views
5

Tôi đã khai báo biến uint8 và khi giá trị trong đó được in, tôi nhận được khuôn mặt cười và không gian màu trắng. Không nên nó hiển thị giá trị số nguyên?uint8 hiển thị các ký tự lạ

+1

đăng mã của bạn. – tenfour

+0

Tôi đang sử dụng thư viện từ nhà cung cấp..nó trả về kiểu uint8 – aks

+0

Bạn đang cố in nó dưới dạng chuỗi bằng cách sử dụng định dạng '% s'? Thay vào đó, hãy thử in các ký tự riêng lẻ. – dirkgently

Trả lời

12

Tôi đặt cược uint8typedef cho unsigned char trong tiêu đề hệ thống của bạn. Sau đó, std::cout << u sẽ in các ký hiệu thay vì giá trị số nguyên, trong đó u thuộc loại uint8. Hãy thử

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

hoặc

std::cout << +u; 

có giá trị số được in ra.

+0

nhưng sẽ không đúc thành int32? – aks

+0

Có, nó sẽ. Nhưng vấn đề là gì? Điều đó tạo ra một int tạm thời từ biến uint8 của bạn và nạp nó vào std :: cout để in. – usta

+0

@Rajesh. Nếu bạn đang in chữ số thập phân, bạn có nghĩ rằng nó tạo ra bất kỳ sự khác biệt nào nếu giá trị được lưu trữ trong một uint8 hoặc uint32 ngay trước khi nó được in? –

0

Tất cả phụ thuộc vào cách bạn in giá trị. Đối với cout, hãy thử cout << (long unsigned int)var; và đối với printf, bạn có thể thử sử dụng thông số định dạng %lu. Tuy nhiên, như chúng tôi đã đề cập, uint8 có thể được xác định hoặc đã gõ như một thứ khác, vì đó không phải là loại ISO C++. Cũng có khả năng là uint8 được gõ vào unsigned long int (chung), hoặc unsigned __int64 (nền tảng MS cụ thể), và trình biên dịch MSVC++ chỉ thực hiện chuyển đổi ngầm không đúng. Nếu không biết những gì uint8 được định nghĩa là, rất khó để nói.

+0

uint8 đang được sử dụng trực tiếp ....> typedef uint8 _UINT1; Trong bình luận, nó nói 1 số nguyên byte (Làm thế nào để tôi đặt một khối màu xám xung quanh mã?) – aks

+0

Vâng, sau đó '_UIN1;' có thể được định nghĩa là một cái gì đó khác, quá. Bạn sẽ phải làm theo typedef's cho đến khi bạn nhấn vào kiểu nội tại (mặc dù, '_UINT1' dường như ngụ ý một char chưa ký, không phải là số 64 bit). Ngoài ra, bạn có thể chỉ định văn bản dưới dạng mã (ví dụ: "hộp màu xám") bằng cách bao bọc văn bản trong các ký tự trích dẫn sau. – Javert93

+0

typedef uint8 _UINT1; định nghĩa _UINT1 làm bí danh cho uint8, không phải là cách khác xung quanh. Vì vậy, bạn sẽ phải tìm một typedef XXX uint8; khai báo để biết uint8 là gì. Hoặc bạn chỉ có thể tin tưởng tôi rằng nó là một số nguyên không dấu 8 bit, và là một bí danh cho unsigned char :) [u] intN [_t] loại luôn biểu thị các số nguyên N-bit, không phải số nguyên N-byte. – usta

Các vấn đề liên quan