@LakushaFujin

Открываю файл разными редакторами — содержимое разное. Почему?

Здравствуйте. Есть mkv файл. Если открываю через блокнот или в бинарном режиме в visual studio, то получаю набор символов вида "→EЯ??B┼?☺Bт?♦BуB'?matroskaB╪?☺". Но случайно открыл в sublime text, так там сразу получился идеальный (для дальнейшей обработки) результат - набор шестнадцатеричных чисел (на всякий случай часть из них - 1a45 dfa3 0100 0000).

Казалось бы, достаточно преобразовать эти символы в VS в двоичный код и результат будет таким же. Только при преобразовании символов в int (и uint32_t) происходят косяки. А именно - уже третий и четвёртый символы, описанной выше последовательности, преобразовываются в отрицательные числа (в случае uint в многозначное положительное), в результате чего и двоичный код выходит неправильный.
Почему так? Как мне получить в VS нормальную последовательность чисел?

5cb087ada8ff6992270445.jpeg
Тут результат преобразования этих символов сначала в int, а потом в двоичный код.
После слова Тест идёт два числа - это я перевёл шестнадцатеричные числа, полученные из sublime text, в двоичный код.
Если не считать первые 8 нулей (откуда они могут браться, если в другом редакторе их нет?) в последовательности, полученной в VS, а так же неверно переведённых символов, то числа совпадают.

И вот код, которым открываю файл и провожу преобразование.
setlocale(LC_ALL, "ru");

	string path = "video.mkv";
	
	ifstream mkv;

	mkv.open(path, fstream::binary);

	if (!mkv.is_open())
	{
		cout << "Not" << endl;
	}
	else
	{
		cout << "Success!" << endl;
		for (int i = 0; i < 5; i++)
		{
			char byte;
			mkv >> byte;
			cout << byte << "\t" << (int)byte << "\t" << bitset<16>((int)byte) << "\t" << i << endl;
		}
		cout << "Test: " << bitset<16>(0x1a45) << "\t" << bitset<16>(0xdfa3) << endl;
  • Вопрос задан
  • 216 просмотров
Пригласить эксперта
Ответы на вопрос 1
Griboks
@Griboks
В файле содержатся байты. Вы пытаетесь их прочитать. Читать можно только текст. Следовательно, вы должны преобразовать байты в текст. Обычно, буквы подставляются по таблице кодировок. Ваши разные редакторы используют разные таблицы, соответственно, разный текст сопоставляется с одним файлом.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы