24
Ноя
2020

C++ fwrite() из строки, повреждается картинка или текстовый документ

Собираюсь передавать картинку по UDP, для этого очень нужно превратить считанные данные в строку. Превращаю. Но обратно превратить строку в картинку уже не могу, картинка получается битая. Хотя никаких лишних данных я в нее не записываю (CRC-16 и размер каждого фрагмента сходится). Вот псевдо пример, где воспроизводится эта ошибка (без udp):

FILE* in_image_stream = fopen("C:\\Users\\Codeine\\source\\repos\\mt_2_lab_3\\Debug\\myfile.jpg", "rb");
size_t bytes_read = 0;
char buf[250];

while ((bytes_read = fread(&buf, sizeof(char), 250, in_image_stream)) > 0)
{
    FILE* out_image_stream = fopen("C:\\Users\\Codeine\\source\\repos\\mt_2_lab_3\\Debug\\result.jpg", "ab+");
    string string_buf(buf);

    fwrite(string_buf.c_str(), 250, sizeof(char), out_image_stream); // 10 строка
    fclose(out_image_stream);
}
fclose(in_image_stream);

Если поменять 10 строку на:

fwrite(&buf, 250, sizeof(char), out_image_stream);

То все хорошо, но с клиентом так не получится, он получит данные в виде const char[]. Грубо говоря мне нужно buf[250] превратить в строку, а потом записать её в файл. И чтобы при этом изображение не повредилось.

С текстовым файлом получается примерно такая проблема: Исходный выглядит так:

абвг
абвг
абвг
абвг
абвг
абвг
абвг
абвг
абвг

1544
9999

А при считывании->превращении в строку->превращении в const char[]->записи в это:

абвг
абвг
абвг
абвг
абвг
абвг
абвг
абвг
абвг

1544
9999ММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММ

Источник: https://ru.stackoverflow.com/questions/1208897/c-fwrite-%D0%B8%D0%B7-%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B8-%D0%BF%D0%BE%D0%B2%D1%80%D0%B5%D0%B6%D0%B4%D0%B0%D0%B5%D1%82%D1%81%D1%8F-%D0%BA%D0%B0%D1%80%D1%82%D0%B8%D0%BD%D0%BA%D0%B0-%D0%B8%D0%BB%D0%B8-%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%BE%D0%B2%D1%8B%D0%B9-%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82

Тебе может это понравится...

Добавить комментарий