سؤال

لدي سؤال سريع حول كيفية الحصول على طول الملف الذي يحتوي على أرقام سداسية عشرية. علي سبيل المثال:

724627916C

الطريقة الوحيدة التي يمكنني التفكير فيها هي تحويل قيمة عرافة إلى ثنائي:

724627916C => 0111001001000110001001111001000101101100

ثم عد أجزاء القيمة الثنائية. فقط أتساءل عما إذا كانت هذه هي الطريقة الصحيحة؟ شكرًا

هل كانت مفيدة؟

المحلول

لا، هذه ليست الطريقة الصحيحة.

FILE *fp = fopen("filename", "rb");
fseek(fp, 0, SEEK_END);
int lengthOfFile = ftell(fp);
fclose(fp);

من حيث المبدأ: افتح ملف، ابحث عن النهاية واسترداد موضعك الحالي. ما ستحصل عليه هو عدد البايتات في الملف.

تحرير: سؤالك هو غير واضح قليلا. هل ترغب في استرداد عدد البايتات في الملف، أو عدد البايتات التي تمثلها السلسلة السداسية عشرية في الملف؟ إذا كان الأخير هو الحال، وليس لديك أي Whitespaces في ملفك، فما عليك سوى تقسيم عدد البايتات التي تم إرجاعها بواسطة الطريقة أعلاه بنسبة 2.

نصائح أخرى

في أنظمة التشغيل UN * X، stat يمكن استخدامها لهذا الغرض.

محاولة هذه الإجابة لبعض المساعدة. إذا لم ينجح ذلك، فإن Google لديه الكثير من المعلومات حول تحديد حجم الملف في C.

إذا كنت ترغب في حساب البتات، فسيكون أبسط إعداد صفيف يخبرك بمبلغ عدد البتات في كل رقم سداسي (فهرسة بواسطة رمز الحرف)، ثم أضف أشياء تصل دون تحويل صريح إلى ثنائي.

على افتراض C99:

static bits_map[256] =
{
    ['0'] = 0, ['1'] = 1, ['2'] = 1, ['3'] = 2,
    ['4'] = 1, ['5'] = 2, ['6'] = 2, ['7'] = 3,
    ['8'] = 1, ['9'] = 2,
    ['a'] = 2, ['b'] = 3, ['c'] = 2, ['d'] = 3,
    ['e'] = 3, ['f'] = 4,
    ['A'] = 2, ['B'] = 3, ['C'] = 2, ['D'] = 3,
    ['E'] = 3, ['F'] = 4,
};

size_t n_bits = 0;
int c;
while ((c = getchar()) != EOF)
    n_bits += bits_map[c];

printf("Number of bits set: %zd\n", n_bits);

طول الملف في C يذهب استخدام الوظيفة _filelength ()

#include <io.h>

int fn, fileSize;
FILE * f = fopen(&String, "rb");
if (f)
{
  fn = _fileno(f);
  fileSize = _filelength(fn);
}
fclose(f);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top