У меня есть символ [] с буфером именем , данные сохраняются с использованием ifstream в двоичном режиме,символ, шестнадцатеричный, потому что он показывает FFFFFF
void File::mostrarBuffer(){
for (int a = 0; a < std::strlen(buffer); a++){
std::cout << std::hex << ((int)buffer[a]) << std::endl;
}
// para ver char test, only for test
std::cout << "===" << std::endl;
for (int a = 0; a < std::strlen(buffer); a++){
std::cout << buffer[a] << std::endl;
}
char charTest = '\211';
std::cout << "===" << std::endl;
std::cout << std::hex << (int)charTest << std::endl;
std::cout << std::hex << (int)buffer[0] << std::endl;
}
оболочка из:
ffffff89
50
4e
47
===
\211
P
N
G
===
ffffff89
ffffff89
файл в шестнадцатеричного ("прямой порядок байтов"):
0000000 5089 474e 0a0d 0a1a 0000 0d00 4849 5244
мой вопрос: почему, появляется ffffff89, а не 89, и только на первом элементе char [] Я был с этим и не могу найти решение. Спасибо за прочтение.
это решение работает для меня:
std::cout << std::hex << ((unsigned int)(unsigned char)buffer[a])
<< std::endl;
Вы используете 'char', который, по-видимому, * подписан * в вашем компиляторе, и если установлен верхний бит (бит знака), то кастинг будет * расширять знак *. –