Tại sao char theo mặc định trong phạm vi từ -128 đến 127 khi nó được cho là đại diện cho một 'ký tự' có reprezentations văn bản nằm trong khoảng từ 0 đến 255? Theo nghĩa này, tôi đoán char nên được unsigned theo mặc định, chỉ khi chúng tôi dự định để xử lý nó chỉ giống như 'số' chúng tôi sẽ phải thêm 'đã ký' từ khóa. Vì vậy, tôi nên sử dụng unsigned char khi tôi làm việc với các tập tin văn bản?Tại sao 'char' được ký theo mặc định trong C++?
Ngoài ra, tôi không hiểu tại sao các chức năng đọc và viết của std::ofstream
sử dụng char
và không unsigned char
khi tôi cần làm việc với tệp nhị phân. Ở đó tôi không quan tâm đến chữ ký, phải không? Hơn nữa tôi đã thực hiện successfuly một bản sao của một tập tin JPEG sử dụng signed char
như thế này:
//..open all streams..
char c;
while(input.peek()!=EOF){
input.read(&c,1); //std::ifstream input;
output.write(&c,1); //std::ofstream output;
}
//..close all streams..
Kể từ khi nó hoạt động Tôi nghĩ rằng read
đọc một unsigned byte
s (trong xử lý hình ảnh một unsigned char
thường được sử dụng) và đặt c
để giá trị có một số giải thích ngẫu nhiên đã ký trong phần bổ sung của 2. Tôi cần phải tạo một biểu đồ của các giá trị, nhưng tôi nhận được một lỗi thời gian chạy vì tôi sử dụng char đã ký làm chỉ mục. Không phải là nó khá ngu ngốc mà tôi phải sử dụng một số diễn viên uc = (unsigned char)c;?
khi có thể có ít nhất một quá tải đơn giản của đọc/ghi cho char unsigned?
'char' không phải lúc nào cũng được ký. Và ASCII kết thúc ở 127, do đó, nó khá hợp lý không phải để đi qua xem xét gần như tất cả các hệ thống sử dụng nó. – chris
+1 @chris, tùy thuộc vào việc triển khai. –
Ou, tôi dường như bỏ lỡ ghi chú về char trong tài liệu. Trên máy tính của tôi 'char' được ký theo mặc định và bộ char của nó bao gồm một số lettes có dấu, do đó, nó không có ý nghĩa đối với tôi. –