Я новичок в C ++. У меня есть новый проект на работе, где я должен изучить его, поэтому я пробую кое-что просто проверить свое понимание. Для этой проблемы я пытаюсь прочитать файл, а затем распечатать его на экране. Супер просто, просто пытаюсь добиться успеха в этом и понять функции, которые я использую. Я скопировал некоторый текст из документа MS Word в файл блокнота (* .txt) и пытаюсь прочитать этот файл * .txt. Весь текст в документе word выделен жирным шрифтом, но кроме этого нет никаких «необычных» символов. Все выводится на экран так, как оно выглядит в документе, кроме выделенного жирным шрифтом символа «-». Этот символ печатается как "u" с символом шляпы (так называемый расширенный код ASCII 150). Я пытаюсь распечатать целочисленное значение этого символа в моем массиве (которое должно быть 150), но я получаю -106. Я понимаю, что это целое число со знаком имеет те же биты, что и целое число без знака 150. Мой вопрос: как получить результат, чтобы сказать 150? Вот мой код:
#include <iostream>
#include <fstream>
using namespace std;
int main() {
unsigned char* input1;
int input1size = 57;
ifstream file("hello_world2.txt",ios::binary | ios::ate);
if (file.is_open()){
int size;
size = (int) file.tellg();
cout <<"This file is " << size << " bytes." << endl;
file.seekg(0,ios::beg);
input1 = new unsigned char[input1size];
file.read(input1, input1size);
cout << "The first " << input1size <<" characters of this file are:" << endl<<endl;
for (int i=0; i<input1size; i++) {
cout << input1[i];
}
cout<<endl;
}
else {
cout <<"Unable to open file" << endl;
int paus;
cin>>paus;
return 0;
}
file.close();
int charcheck = 25;
int a=0;
int a1=0;
int a2=0;
unsigned int a3=0;
unsigned short int a4=0;
short int a5=0;
a = input1[charcheck];
a1 = input1[charcheck-1];
a2 = input1[charcheck+1];
a3 = input1[charcheck];
a4 = input1[charcheck];
a5 = input1[charcheck];
cout <<endl<<"ASCII code for char in input1[" << charcheck-1 <<"] is: " << a1 << endl;
cout <<endl<<"ASCII code for char in input1[" << charcheck <<"] is: " << a << endl;
cout <<endl<<"ASCII code for char in input1[" << charcheck+1 <<"] is: " << a2 << endl;
cout <<endl<<"ASCII code for char in input1[" << charcheck <<"] as unsigned int: " << a3 << endl;
cout <<endl<<"ASCII code for char in input1[" << charcheck <<"] as unsigned short int: " << a4 << endl;
cout <<endl<<"ASCII code for char in input1[" << charcheck <<"] as short int: " << a5 << endl;
int paus;
cin>>paus;
return 0;
}
Вывод для всего этого выглядит так:
This file is 80 bytes.
The first 57 characters of this file are:
STATUS REPORT
PERIOD 01 u 31 JUL 09
TASK 310: APPLIC
ASCII code for char in input1[24] is: 32
ASCII code for char in input1[25] is: -106
ASCII code for char in input1[26] is: 32
ASCII code for char in input1[25] as unsigned int: 4294967190
ASCII code for char in input1[25] as unsigned short int: 65430
ASCII code for char in input1[25] as short int: -106
Таким образом, кажется, что «int a» всегда читается как подписанный. Когда я пытаюсь сделать «a» без знака, он превращает все биты, оставшиеся от восьми битов для символа, в 1. Почему это? Извините за длину вопроса, просто пытаюсь быть подробным. Спасибо!