Учитывая 2 32bit Интс iMSB и ILSBC++ долго долго манипуляция
int iMSB = 12345678; // Most Significant Bits of file size in Bytes
int iLSB = 87654321; // Least Significant Bits of file size in Bytes
длинная длинная форма будет ...
// Always positive so use 31 bts
long long full_size = ((long long)iMSB << 31);
full_size += (long long)(iLSB);
Теперь ..
мне не нужно, что (точное количество байтов), поэтому, как я могу преобразовать размер файла в MiBytes в 3 десятичных знака и преобразовать в строку ...
пробовал это ...
long double file_size_megs = file_size_bytes/(1024 * 1024);
char strNumber[20];
sprintf(strNumber, "%ld", file_size_megs);
... но dosen't, похоже, работает.
i.e. 1234567899878Bytes = 1177375.698MiB ??
Сколько битов данных есть в ILSB? Эта информация необходима для правильного смещения значения iMSB в нужное место. Надеюсь, вы также поймете, что вы инициализировали переменные с десятичными значениями, а после смещения бит часть MSB - это нечто совершенно другое. – Tronic
Этот сдвиг 31 бит вместо 32 кажется ужасно подозрительным. – OldFart
@OldFart - целые числа подписаны, поэтому только 31 бит используется в том, что возвращается и помещается в iMSB и iLSB. Это верхние 31 бит и нижние 31 бит размера. – Krakkos