В чём измеряется размер файла?

190
25 мая 2022, 02:50

В доках сказано, что file_size возвращает результат в байтах. Имеются в виду октеты (8 бит) или количество char-ов?

Answer 1

Имеются ввиду именно байты. Поэтому, байты это sizeof(char). А вот будет байт 8 бит или нет - это детали конкретного компилятора/операционной системы (да, на большинстве ОС, которые Вы встретите, байт будет 8 бит).

Если же хочется странного, то всегда можно почитать, что пишут здесь https://isocpp.org/wiki/faq/intrinsic-types

И если после этого все ещё хочется, то делаем так. Подключаем нужные заголовки

#include <climits>

И потом появляется макрос CHAR_BIT, который содержит кол-во бит в байте на конкретной системе. Теперь дело за малым

your_size*CHAR_BIT/8

да, вдруг может оказаться, что там байт на 8 бит не делится (12 бит на байт), но тут уже самостоятельно решайте, то делать и как (вещественная арифметика в помощь). Но для 99% людей ответ 1.5 байта будет дивным

Answer 2

В той же документации написано:

sizeof(char), sizeof(char8_t), sizeof(signed char), sizeof(unsigned char), and sizeof(std::byte) are always equal to 1

Известно, что sizeof возвращает размер обьекта/типа в байтах. Значит, char и есть один байт. Ну а сколько в байте битов зависит от архитектуры компьютера.

READ ALSO
Что обозначает код [_=&amp;*+[]{}](){}()?

Что обозначает код [_=&*+[]{}](){}()?

Как расшифровать этот код?

249
C++ CLI - ссылка на неразрешенную лексему

C++ CLI - ссылка на неразрешенную лексему

Данный код не выполняется в проекте:

149
Ошибка в простейшем алгоритме

Ошибка в простейшем алгоритме

Нужно обнулить последние биты даного числа n0<=n<=2^31

166
Перебор между собой всех строк матрицы

Перебор между собой всех строк матрицы

У меня вот такая вот задача:

174