Гость
Map
Форумы / C++ [игнор отключен] [закрыт для гостей] / fopen - fread текстового файла / 25 сообщений из 36, страница 1 из 2
05.07.2021, 13:47
    #40081791
wolverin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
fopen - fread текстового файла
Все работало прекрасно, пока однажды не ребутнули linux, который видимо загрузился с новым ядром и некоторые скомпилированные файлы стали работать странно.

Решил просто пересобрать глючные и тут выяснилось, что fopen с опцией "r" ("rt" ничего не меняет) + fread читают вроде как надо - бинарно, но оказывается раньше они читали по иному (как текст что ли).

Суть - есть некая утилита под виндой кодирующая файл. Алгоритм и "пароль" дешифровки известен, декодирую под Дебианом, но почему то считывание одного и того же файла происходит по разному (коды символов ЧАСТИЧНО в считанной строке получаю разные) - под виндой строка, под линуксом чистые бинарные символы.

Как правильно читать в "линуксах", чтобы получить аналогичное преобразование?
Не соображу никак...
...
Рейтинг: 0 / 0
05.07.2021, 13:52
    #40081793
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
fopen - fread текстового файла
Работать не с символами, а с байтами.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
05.07.2021, 13:57
    #40081795
wolverin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
fopen - fread текстового файла
Dimitry Sibiryakov,

да это понятно, виндовая утилита уже так сделана, мне нужно под нее подстроиться

вот пример как читает "на винде"
авторiDm9>'

как на самом деле выглядит бинарник
авторiDm !
...
Рейтинг: 0 / 0
05.07.2021, 13:58
    #40081796
wolverin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
fopen - fread текстового файла
wolverin
Dimitry Sibiryakov,

да это понятно, виндовая утилита уже так сделана, мне нужно под нее подстроиться

вот пример как читает "на винде"
авторiDm9>'


как на самом деле выглядит бинарник
авторiDm !&
...
Рейтинг: 0 / 0
05.07.2021, 13:59
    #40081797
wolverin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
fopen - fread текстового файла
т.е. вопрос как получить такую же как первая строка?

например, должен быть символ в DEC 57, но по факту там бинарный DEC 32
где происходит преобразование не понимаю
...
Рейтинг: 0 / 0
05.07.2021, 14:19
    #40081801
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
fopen - fread текстового файла
Для понимания увлекательный процесс существует. "Отладка" зовётся.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
05.07.2021, 14:25
    #40081803
wolverin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
fopen - fread текстового файла
Dimitry Sibiryakov,

хорошо бы конечно отдалить, но от чужой утилиты у меня только кусок кода на дельфи, где происходит просто TFileStream.Read и там уже строка ДРУГАЯ, нежели в бинарнике

наверное преобразование типов где то происходит, но где... и почему раньше работало, а после обновления этих линуксов перестало...
...
Рейтинг: 0 / 0
05.07.2021, 14:29
    #40081805
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
fopen - fread текстового файла
wolverinи там уже строка ДРУГАЯ

Перестань выводить её как строку, выводи как массив байт в шестнадцатеричном виде.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
05.07.2021, 14:32
    #40081806
wolverin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
fopen - fread текстового файла
Dimitry Sibiryakov,

мне дали этот кусок от дельфи, чтобы я на gcc декодировку сделал, так что я не могу не выводить строкой, так сделано там, т.е. от TFileStream.Read мне некуда бежать, а почему он получает другую строку, не понимаю
...
Рейтинг: 0 / 0
05.07.2021, 14:40
    #40081808
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
fopen - fread текстового файла
TFileStream.Read читает двоичный буфер, не надо бредить.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
05.07.2021, 15:20
    #40081828
petrav
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
fopen - fread текстового файла
wolverin
Все работало прекрасно, пока однажды не ребутнули linux, который видимо загрузился с новым ядром и некоторые скомпилированные файлы стали работать странно.

Я думаю это практически нереально, если это не Астра Линукс. За такие фортели Торвальдс приступил бы к увольнениям всех причастных (даже косвенно причастных).
...
Рейтинг: 0 / 0
05.07.2021, 16:18
    #40081855
wolverin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
fopen - fread текстового файла
petrav,

может и не реально, однако просто пересобранный стал больше где то на 3%
интереса ради скопировал на другой сервер - проблема та же
...
Рейтинг: 0 / 0
05.07.2021, 16:26
    #40081858
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
fopen - fread текстового файла
wolverin,

https://en.cppreference.com/w/c/io/fopen
File access mode flag "b" can optionally be specified to open a file in binary mode.
...
Рейтинг: 0 / 0
05.07.2021, 16:37
    #40081862
wolverin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
fopen - fread текстового файла
Dimitry Sibiryakov

TFileStream.Read читает двоичный буфер, не надо бредить.

что то не получает он у меня двоичный, сделал просто
Код: pascal
1.
2.
3.
Buf: string;
SetLength(Buf, 80);
TFileStream.Read(Buf[1], 80)


и вуаля - часть символов в Buf отличается от бинарника
...
Рейтинг: 0 / 0
05.07.2021, 16:48
    #40081865
a guest
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
fopen - fread текстового файла
Siemargl, флаг 'b' в POSIX (в т.ч. glibc) не имеет никакого эффекта и игнорируется
...
Рейтинг: 0 / 0
05.07.2021, 16:48
    #40081866
wolverin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
fopen - fread текстового файла
Siemargl,

да это все понятно, не понятно почему вдруг после ребута дебиана работать перестало, опцию b я до этого не использовал, но и с ней ничего не меняется, т.е. раньше он должен был читать как текстовый файл по идеи, но разницы в fopen нет с каких ключом открыть.
...
Рейтинг: 0 / 0
05.07.2021, 16:51
    #40081869
wolverin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
fopen - fread текстового файла
может дело в кодировке!?
...
Рейтинг: 0 / 0
05.07.2021, 17:05
    #40081875
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
fopen - fread текстового файла
wolverin
может дело в кодировке!?

Buf: string; - юникодный же небось ?
...
Рейтинг: 0 / 0
05.07.2021, 17:16
    #40081879
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
fopen - fread текстового файла
wolverinи вуаля - часть символов в Buf отличается от бинарника

Повторяю медленно, специально для дельфинов: символы это не байты, смотреть надо на байты,
байты нельзя складывать в string, на символы в строке смотреть бесполезно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
05.07.2021, 17:36
    #40081882
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
fopen - fread текстового файла
wolverin
может дело в кодировке!?

Возможно у него раньше были сайд-эффекты на кодировке 1251. После обновления - utf8.
Почему раньше работало в комллексе - ХЗ. Возможно одиаковое (неправильное) поведения под Windows/Delphi
и Debian компенсировали друг друга и никто ничего не замечал.
...
Рейтинг: 0 / 0
05.07.2021, 17:42
    #40081885
wolverin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
fopen - fread текстового файла
Siemargl,

гугл говорит в дельфи 7 ansi 1 байт, поэтому вроде как читаю в gcc как unsigned char
...
Рейтинг: 0 / 0
05.07.2021, 17:43
    #40081887
wolverin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
fopen - fread текстового файла
mayton,

может вы и правы, а что за обновление utf8 ?
...
Рейтинг: 0 / 0
05.07.2021, 17:44
    #40081888
wolverin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
fopen - fread текстового файла
Dimitry Sibiryakov,

да hex то понятно везде одинаковый, мне то надо чтобы в сях получался такой же результат как в дельфах, не важно верный он там или нет
...
Рейтинг: 0 / 0
05.07.2021, 17:51
    #40081892
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
fopen - fread текстового файла
wolverinмне то надо чтобы в сях получался такой же результат как в дельфах, не важно верный он там
или нет

Отлаживайся. Смотри чтобы на каждом шагу алгоритма байты в буфере получались одинаковые.
БАЙТЫ, а не буквы.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
05.07.2021, 17:56
    #40081894
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
fopen - fread текстового файла
wolverin
mayton,

может вы и правы, а что за обновление utf8 ?

Я не знаю. Моё предположение что у тебя в стеке технологий не только fopen/fread а еще и работа с STDIN/STDOUT,
а они могут зависеть от локали.

Посмотри что у тебя сейчас выдает в линуксе.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
$ locale
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=en_US.UTF-8
LC_TIME=en_US.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=en_US.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=en_US.UTF-8
LC_NAME=en_US.UTF-8
LC_ADDRESS=en_US.UTF-8
LC_TELEPHONE=en_US.UTF-8
LC_MEASUREMENT=en_US.UTF-8
LC_IDENTIFICATION=en_US.UTF-8
LC_ALL=
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / fopen - fread текстового файла / 25 сообщений из 36, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]