LINUX.ORG.RU

История изменений

Исправление LINUX-ORG-RU, (текущая версия) :

тип такого, писал прям тут чисто как пример, само сообщение message не включено в запись.

#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>


int main(int argc, char *argv[])
{


    const uint16_t start = 0xfeff;
    char  comment[] = "hello";

    struct message
    {
        uint16_t comment_start_label;
        uint16_t comment_size;
        uint32_t comment_time;
    };

    /*+1 это учёт символа '\0' +2 это ты сказал*/
    struct message msg = {start, strlen(comment) + 1 + 2, (uint32_t)time(NULL)};

    FILE * file = fopen("./test.jpg", "wb");
    fwrite(&msg, 1, sizeof(struct message), file);
    fclose(file); 


    return 0;
}

я еще похоже лишнее обрезал перед записью в файл.

Я понятия не имею что там в заголовке джипега, но по хорошему надо весь заголовок так читать, менять и записывать обратно.

Или если в заголовке есть уже эти поля для комментария и место под него, то использовать fseek() смещаешься на нужный байт , кастуешь в нужный тип, пишешь туда, смещаешься дальше куда надо и так далее.

Если просто взять и дописать в файл то что мы записываем по идее ничего работать не будет

Исправление LINUX-ORG-RU, :

тип такого, писал прям тут чисто как пример, само сообщение message не включено в запись.

#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>


int main(int argc, char *argv[])
{


    const uint16_t comment_magic_number = 0xfeff;
    char  comment[] = "hello";

    struct message
    {
        uint16_t comment_start_label;
        uint16_t comment_size;
        uint32_t comment_time;
    };

    /*+1 это учёт символа '\0' +2 это ты сказал*/
    struct message msg = {comment_magic_number, strlen(comment) + 1 + 2, (uint32_t)time(NULL)};

    FILE * file = fopen("./test.jpg", "wb");
    fwrite(&msg, 1, sizeof(struct message), file);
    fclose(file); 


    return 0;
}

я еще похоже лишнее обрезал перед записью в файл.

Я понятия не имею что там в заголовке джипега, но по хорошему надо весь заголовок так читать, менять и записывать обратно.

Или если в заголовке есть уже эти поля для комментария и место под него, то использовать fseek() смещаешься на нужный байт , кастуешь в нужный тип, пишешь туда, смещаешься дальше куда надо и так далее.

Если просто взять и дописать в файл то что мы записываем по идее ничего работать не будет

Исходная версия LINUX-ORG-RU, :

тип такого

#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>


int main(int argc, char *argv[])
{


    const uint16_t comment_magic_number = 0xfeff;
    char  comment[] = "hello";

    struct message
    {
        uint16_t comment_start_label;
        uint16_t comment_size;
        uint32_t comment_time;
    };

    /*+1 это учёт символа '\0' +2 это ты сказал*/
    struct message msg = {comment_magic_number, strlen(comment) + 1 + 2, (uint32_t)time(NULL)};

    FILE * file = fopen("./test.jpg", "wb");
    fwrite(&msg, 1, sizeof(struct message), file);
    fclose(file); 


    return 0;
}

я еще похоже лишнее обрезал перед записью в файл.

Я понятия не имею что там в заголовке джипега, но по хорошему надо весь заголовок так читать, менять и записывать обратно.

Или если в заголовке есть уже эти поля для комментария и место под него, то использовать fseek() смещаешься на нужный байт , кастуешь в нужный тип, пишешь туда, смещаешься дальше куда надо и так далее.

Если просто взять и дописать в файл то что мы записываем по идее ничего работать не будет