Почему char по умолчанию в диапазоне от -128 до 127, когда он должен представлять "символ", текстовые представления которого находятся в диапазоне от 0 до 255? В этом смысле я бы предположил, что char должен быть неподписанным по умолчанию, только если мы намеревались рассматривать его только как "числа", нам нужно было бы добавить ключевое слово "signed". Поэтому следует ли использовать unsigned char при работе с текстовыми файлами?
Также я не понимаю, почему std::ofstream
функции чтения и записи используют char
, а не unsigned char
, когда мне нужно работать с двоичными файлами. Там меня не интересует подписанность, не так ли? Кроме того, я успешно сделал копию файла JPEG с помощью signed char
следующим образом:
//..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..
Так как он работает, я думаю, что read
читает unsigned byte
(при обработке изображений unsigned char
обычно используется) и устанавливает c
, так что значение имеет некоторую случайную подписанную интерпретацию в 2 дополнениях. Мне нужно создать гистограмму значений, но я получаю ошибку времени выполнения, потому что я использую подписанный char как индекс. Разве это не так глупо, что я должен использовать некоторый листинг uc = (unsigned char)c;?
, когда может быть как минимум простая перегрузка чтения/записи для unsigned char?