كيف يقرأ برنامج ضغط البيانات ملف كملف ثنائي نقي ويجعل الإخراج؟

cs.stackexchange https://cs.stackexchange.com/questions/121856

سؤال

لدي تقنية ضغط هجينة أريد تنفيذها، تنفيذي هو (حتى الآن): يمكنني تشفير سلسلة في سلسلة مضغوطة مشفرة.هذه هي سلاسل ثنائية.على سبيل المثال،

قرأت النصوص من ملف نصي ->

ثم تحويله إلى سلسلة ثنائية ->

ثم تحويله إلى سلسلة ثنائية مشفرة.

في هذه المرحلة، يمكنني حفظ السلسلة الثنائية المشفرة في ملف نصي، ولكن أريد أن أعرف ما يتم بشكل عام.

على سبيل المثال، عندما نستخدم WinRar البرنامج، IT -

  1. لا يقرأ كما قلت أعلاه، فإنه يضغط أي ملف
  2. يجعل ملف .rar كإخراج
  3. لذلك، كيف يقوم ضاغط "بقراءة" أي ملف كأي شكل ثنائي نقي، وكيف يجعل ملف الإخراج؟

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

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

المحلول

ملف هو دفق البايت

على الرغم من أن أجهزة التشغيل توفر بعض الأجراس والصفارات (مثل البيانات الوصفية أو forks )، معظم تعريف ملف كسلسلة من 0 أو أكثر من بايت .

كل بايت في الملف قيمة رقمية من 0 إلى 255 (شاملة). لا يوجد شيء أكثر له.

تنسيق الملف هو وسيلة لإعطاء معنى البايتات في ملف

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

هذا المثال غير فعال للغاية، لأن كل بايت البكسل لا يمكن أبدا استخدام القيم المحتملة 2-255. قد ترغب في قراءتها عن نظرية المعلومات.

"ملف نصي" هو تنسيق ملف

في ملف نصي، يتم إعطاء كل قيمة ممكنة 0-255 معنى أو حرف معين أو رقم أو رمز أو حرف "تأثير خاص" مثل Newline. نوعا ما. بالتحدث بدقة، في ASCII الترميز، فقط القيم 0-127 لها معنى.

هناك العديد من الترميزات النص المختلفة، على الرغم من عدد قليل فقط من الأشياء الشائعة. في Unicode ، لا تكون الأحرف دائما 1 بايت في الطول.

ولكن دعونا تلتصق مع ASCII. إذا قمت بتخزين "51A3" كنص، فإن قيم البايت 53، 49، 97، 51 ستذهب إلى الملف، كما يتوافق مع "5"، "1"، إلخ.

إذا قمت بتخزين القيمة السداسية عشرية 0x51 و 0xa3 ك البايتات ، فسيكون هناك ببساطة هذان بايتان (81 و 163 في عشري.) لذلك هذا هو نصف عدد البايتات. ومع ذلك، لم يعد الملف ملف نصي لأن 163 غير محددة في ASCII.

تنسيقات الملفات الأخرى تتطلب البرامج المبنية للغرض

الملفات النصية تحظى بشعبية لأنك يمكنك فتحها في أي محرر (المفكرة النانو). كما تفهم، فهي ليست فعالة فضائية للغاية.

ولكن ليس من الصعب كتابة البرنامج الخاص بك. هنا مثال.

giveacodicetagpre.

بعد تشغيل هذا التحقق من طول الملف نصف طول سلسلة Hex. أيضا، تعلم كيفية استخدام أداة HexDump لتفقد محتويات الملف.

Python's كائنات بايتز تحتوي على الكثير من الميزات ولكن إذا كنت تستخدم الفكرة الأساسية أعلاه (قائمة ITS في المدى 0-255 -> كائن BYTES) و (التكرار فوق كائن البايت واحصل على INT في النطاق 0-255) ثم لا تحتاج إلى التعمق في التفاصيل.

برنامج ضغط جميع الأغراض عادة لا يفهم الملفات التي يضغط

عند وضع ملف MP3 في الرمز البريدي أو RAR، يعامل برنامج الضغط على أنه سلسلة من البايتات، بنفس الطريقة التي ستعامل بها ملف JPEG أو EXE أو HTML.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى cs.stackexchange
scroll top