ما هو الفرق بين النص العادي والبيانات الثنائية؟

StackOverflow https://stackoverflow.com/questions/1434885

  •  07-07-2019
  •  | 
  •  

سؤال

تحتوي العديد من اللغات على وظائف تعالج "النص العادي" فقط، وليس الثنائي.هل هذا يعني أنه سيتم السماح فقط بالأحرف الموجودة ضمن نطاق ASCII؟

الثنائي هو مجرد سلسلة من البايتات، أليس مشابهًا للنص العادي الذي هو مجرد سلسلة من البايتات التي يتم تفسيرها على أنها أحرف؟إذن، هل يمكن للنص العادي تخزين نفس تنسيقات/بروتوكولات البيانات مثل الملفات الثنائية؟

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

المحلول

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

في المقابل ، فإن عمليات الإدخال/الإخراج اللغوية التي تعلن عن العمل على البيانات "الثنائية" عادة ما تتضمن معلمة إدخال لطول البيانات للعمل عليها ، نظرًا لعدم وجود طريقة أخرى (أقل من قراءة الطرف السابق للملف) لمعرفة متى تم.

نصائح أخرى

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

حاول فتح ملف JPEG مع محرر نصوص (مثل المفكرة أو VIM) وستفهم ما أعنيه.

عادةً ما يتم إنشاء ملف ثنائي بطريقة تعمل على تحسين السرعة ، نظرًا لعدم الحاجة إلى تحليل. ملف نصي عادي قابل للتحرير باليد ، ملف ثنائي لا.

يمكن أن يكون لكلمة "نص عادي" عدة معانٍ.

والأكثر فائدة في هذا السياق هو أنها مجرد ملفات ثنائية يتم تنظيمها في تسلسلات بايت يمكن لنظام كمبيوتر معين ترجمتها إلى مجموعة محدودة مما يعتبره أحرف "نصية".

المعنى الثاني، المرتبط إلى حد ما، هو تقييد النظام المذكور الذي يجب أن يعرض هذه "الأحرف النصية" كرموز يمكن للإنسان قراءتها كأعضاء في أبجدية يمكن التعرف عليها.في كثير من الأحيان، يكون المعنى غير المكتوب هو أن آلية الترجمة هي ASCII.

المعنى الثالث، والأكثر تقييدًا، هو أن هذا النظام يجب أن يكون محرر/عارض نصوص "بسيط".عادةً ما يشير ذلك إلى ترميز ASCII.ولكن، في الواقع، هناك اختلاف بسيط جدًا بينك، كإنسان، يقرأ النص المشفر بتنسيق غير تقليدي ويتم عرضه بواسطة برنامج خاص، مقابل النص الذي يقرأه.محرر النصوص السادس يقرأ الملف المشفر ASCII.

ضمن سياق البرمجة, ، تحدد بيئة البرمجة الخاصة بك (المكونة من نظام التشغيل + واجهات برمجة تطبيقات النظام + إمكانيات اللغة الخاصة بك) مجموعة من الأحرف "النصية" ومجموعة من الترميزات التي يمكنها قراءتها للتحويل إلى هذه الأحرف "النصية".يرجى ملاحظة أن هذا قد لا يعني بالضرورة ASCII أو الإنجليزية أو 8 بت - على سبيل المثال، يمكن لـ Perl قراءة واستخدام مجموعة Unicode الكاملة من "الأحرف".

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

بشكل عام ، يعتمد ذلك على اللغة/البيئة/الوظيفة.

البيانات الثنائية هي دائما: ثنائية. يتم نقله دون تعديل.

قد يعني وضع "النص العادي" واحدًا أو أكثر من الأشياء التالية:

  • يتم تقسيم تيار البايت إلى خطوط. محددات الخط هي r ، n ، أو r n ، أو n r. في بعض الأحيان يكون يعتمد على نظام التشغيل (مثل *nix الإعجابات n ، في حين أن Windows يحب r n). قد يتم تعديل الخط الذي ينتهي لتطبيق القراءة
  • قد يتم ضبط تشفير الأحرف. قد تكتشف البيئة و/أو تحويل المصدر الترميز إلى ترميز التطبيق يتوقع
  • ربما ينبغي إضافة بعض التحويلات الأخرى إلى هذه القائمة ، لكن لا يمكنني التفكير في هذه اللحظة بعد الآن

من الناحية الفنية لا شيء. النص العادي هو شكل من أشكال البيانات الثنائية. ومع ذلك ، هناك اختلاف كبير في كيفية تخزين القيم. فكر في كيفية تخزين عدد صحيح. في البيانات الثنائية ، سيستخدم تنسيقًا مكملاً للاثنين ، وربما يأخذ 32 بت من المساحة. في تنسيق النص ، سيتم تخزين رقم بدلاً من ذلك كسلسلة من أرقام Unicode. لذلك سيتم تخزين الرقم 50 على أنه 0x32 (مبطنًا لتناول 32 بت) في ثنائي ولكن سيتم تخزينه على أنه "5" 0 "في نص عادي.

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