У меня есть массив байтов данных, который должен быть последовательной кросс-платформенной. Предположим, у меня есть указатель, unsigned char* data
, который указывает на какое-то место внутри моего массива, и я хочу читать 4 байта в переменную. Я думаю, что я мог бы просто так:Обработка верификации при чтении из массива байтов в C?
uint32_t my_int = *data;
Однако, я понимаю, что метод не учитывает байтов. Например, если мои данные были в большой энциклопедии, я должен был бы сделать это, чтобы читать его последовательно?
uint32_t my_int = (data[0] << 3) + (data[1] << 2) + (data[2] << 1) + data[3];
Кроме того, я должен сделать те же проверки при написании этих данных с fwrite
? Например, если бы я написал, что одни и те же данные в файл с этим кодом:
fwrite(&my_int, sizeof(my_int), 1, fh);
ли полученные данные имеют любую известную порядка байтов? Или это будет зависеть от архитектуры? Если да, то какой самый простой способ сделать эти чтения и записи и обеспечить конкретную контенту на все платформы?
_Byte_ массивы не имеют никакой энтузиазма ... – vonbrand
@vonbrand Ну, очевидно, конечно, они этого не делают, но вопрос в том, будут ли операции * с * этим массивом затронуты консистенцией платформы. –
Что вы пытаетесь сделать? Если это просто массив байтов, endianess не будет проблемой. Вы пытаетесь читать 4 байта как целое число? – tangrs