Skip to main content

Command Palette

Search for a command to run...

شماره جادویی چیست؟

Published
3 min read

شماره‌های جادویی به طور عادی برای کاربران قابل مشاهده نیستند‌. اما کاربران می‌توانند به راحتی و با استفاده از یک ویرایشگر hex که به طور تخصصی برای نمایش و تغییر هر بایت از یک فایل طراحی شده به مشاهده این عدد بپردازند‌.

برای فرمت‌های معروف فایل‌ها‌، شماره‌ها به طور قراردادی نام نوع فایل را معرفی می‌کنند‌. از این رو برای مثال‌، شماره جادویی فایل‌های عکس GIF۸۷a که به طور گسترده‌ای مرسوم هستند در نمایش هگزادسیمال (یا‌‌ همان مبنا ۱۶) به صورت ۰x۴۷۴۹۴۶۳۸۳۷۶۱ نمایش داده می‌شوند که با ترجمه‌اش به ASCII مقدار GIF۸۷a بازگردانده می‌شود‌. ASCII یک de facto standard (‌استانداردی که بجای تایید شدن توسط یک سازمان استاندارد‌، به دلیل استفادهٔ زیاد از آن به یک استاندارد تبدیل شده‌) است که توسط کامپیوتر‌ها و تجهیزات ارتباطی برای کدگشایی کاراکتر‌ها (‌از جمله الفبا‌، اعداد و... ‌) مورد استفاده قرار می‌گیرد‌.

همچنین شماره جادویی تصویری که با GIF۸۹a ارائه می‌شود ۰x۴۷۴۹۴۶۳۸۳۹۶۱ است‌. برای هر دو نوع از فایل‌های GIF (Graphic interchanger Format)‎ شماره جادویی شش بایت اول فایل را پر می‌کند‌. و پس از آن اطلاعات اضافه اصلی در مورد فایل (‌نظیر متادیتا‌ها‌) افزوده می‌شوند‌.

به همین صورت شماره جادویی مرسوم مورد استفاده توسط فایل‌های تصویری JPEG (Joint Photographic Experts Group) برابر ۰x۴A۴۶۴۹۴۶ است‌، که از نظر ASCII برابر است با JFIF (JPEG File Interchange Format)‎. به هر حال شماره جادویی JPEG بایت‌های اولیه فایل نیستند‌. آن‌ها از بایت هفدهم آغاز می‌شوند‌. نمونه‌های دیگر از این دست شامل ۰x۴D۵۴۶۸۶۴ برای فایل‌های MIDI (Musical Instrument Digital Interface)‎، و۰x۴۲۵a۶۸۳۱۴۱۵۹۲۵ برای فایل‌های فشرده شده با bzip۲ است‌.

شماره‌های جادویی همیشه برابر با نام خود در فرمت ASCII نیستند‌، یا حتی چیزی شبیه به آن‌. برای مثال‌، در بعضی از انواع فایل‌ها آن‌ها نام توسعه دهندهٔ آن نوع فایل را نشان می‌دهند‌. همچنین برای حداقل یکی از این شماره‌های جادویی تاریخ تولد توسعه دهندهٔ آن فرمت نشان داده می‌شد.

برنامه‌های مختلفی از شماره‌های جادویی برای تشخیص نوع فایل استفاده می‌کنند‌. یکی از آن‌ها خط فرمان است که نوع برنامه‌ها از روی نامشان مشخص می‌شود‌.

اگرچه آن‌ها می‌توانند کاربردی هم باشند‌، شماره‌های جادویی همیشه برای تشخیص نوع فایل استفاده نمی‌شوند‌. دلیل اصلی این است که بعضی از انواع فایل‌ها دارای شماره جادویی نیستند‌، برای مثال فایل‌های متنی ساده‌، که مثلا HTML، XHTML و XML را به عنوان سورس کد در خود دارند‌.

خوشبختانه‌، راه‌های دیگری نیز وجود دارد تا برنامه‌ها با استفاده از آن‌ها به نوع فایل‌ها پی ببرند‌. یکی نگاه کردن به نوع چینش کاراکتر‌های فایل (‌مثلا ASCII) است‌ تا ببینند یک فایل متنی است یا خیر‌. اگر مشخص شد که یک فایل متنی است‌، می‌توان با نگاه به سرآیند فایل دید که از چه نوع نشانگری برای مثال برای HTML و #! (موسوم به شیبنگ) برای اسکریپت‌ها استفاده می‌کند‌.

نوع دیگر تشخیص نوع فایل‌، استفاده از پسوند‌هاست‌ (‌مثل ‎.exe, ‎.html, .‎jpg و ...) که در سیستم عامل‌های مایکروسافتی لازم است و برای بخش کوچکی از لینوکس‌ها و سیستم‌های شبه یونیکس مورد استفاده قرار می‌گیرد‌. به هر حال مشکل این روش آن است که ممکن است که کاربر به طور اتفاقی پسوند فایل را عوش کند‌، که در این صورت فهمیدن نوع فایل بسیار سخت می‌شود‌.

و یک راه دیگر که در بسیاری از سیستم فایل‌های رایج ممکن است‌، استفاده از اطلاعات نوع فایل که در متادیتای هر فایل ضمیمه شده است می‌باشد‌. در سیستم‌عامل‌های شبه یونیکس‌، این متادیتا‌ها در inode‌ها (‌ساختار داده‌ای سیستم فایل‌های یونیکس بیس که تمامی اطلاعات مربوط به فایل به جز نام و دادهٔ اصلی را در خود ذخیره می‌کنند‌) جای می‌گیرند‌، (‌یک راه موثر برای ذخیرهٔ اطلاعات‌).

شماره‌های جادویی به این علت جادویی خوانده می‌شوند که مفهوم و خاصیت مقادیرشان‌، بدون دانستان اطلاعات اضافی نامعلوم است‌. شماره‌های جادویی همچنین در برنامه نویسی برای اشاره به ثابت‌هایی که برای هدفی خاص در نظر گرفته شده‌اند ولی دلیل و یا مقدار وجودیشان بدون اطلاعات اضافه قابل دریافت نیست مورد استفاده قرار می‌گیرد‌.

More from this blog

معجون بهشتی Selenium, PhantomJS و Requests برای web scraping

این روز‌ها خودکار کردن کار‌های تکراری روزمره‌مان یک جورهایی برگ برندهٔ کاربران، توسعه‌دهندگان و یا حتی تیم‌های فعال در حوزهٔ نرم‌افزار محسوب می‌شود. از پتانسیل بالای درآمد‌زایی‌اش در بعضی شرایط اگر بگذریم‌، کاهش زمان مورد نیاز انجام کار‌ها به میزان ز...

Oct 15, 20168 min read

ورژن کنترل اختیاری نیست!

حقیقتش انتظار داشتم این موضوع خیلی وقت پیش حل شده باشد. حتی پیش خودم فکر می‌کردم که ورژن کنترل یک جورهایی جزء غرایض جامعه‌ی نرم‌افزاری است‌، آن هم با درجه‌ی اهمیتی مثل نفس کشیدن. دوستی دارم که حدوداً دو سال پیش روی دیوار فیس‌بوک‌اش از پاک شدن اتفاقی ...

Dec 27, 20154 min read

خوبی‌های جاوا اسکریپت؟

خیلی وقت است ننوشته‌ام و حقیقتش همین الان هم زیاد مثل گذشته حس نوشتن ندارم. موضوع این است که از طرفی چند نفر از شما دوستان در ایمیل‌هایی از من خواستید که باز بنویسم (راستش اصلا فکر نمی‌کردم کسی آن بیرون به فکر چرایی آپدیت نشدن این وبلاگ باشد.) که ازش...

Jul 8, 20153 min read

کدنویسی بازی جاوااسکریپت به صورت زنده توسط Mary Rose

نمی‌دونم چقدر با جاوااسکریپت آشنایی دارین، ولی جدا زبان فوق‌العاده‌ایه. خصوصا این که پلتفرم جذابی داره‌، اصلا نیاز نیست چیزی کامپایل شه یا برنامه خاصی نصب شه‌، یه مرورگر و تموم، دیگه شمایید و خلاقیتتون. گاها آدم یه چیزایی می‌بینه که بدجوری سر شوق می‌...

Oct 8, 20141 min read

برنامه نویسی کرنل لینوکس با راهنمایی The Eudyptula Challenge

عموما کسانی که از گنو/لینوکس به عنوان سیستم‌عامل اصلی‌شان استفاده می‌کنند‌، همه‌اش به خاطر چه می‌دانم‌، فرهنگ آزاد یا روش‌های گیکانه انجام کار‌هایشان نیست. حتی برای باحال‌تر به نظر رسیدن هم نیست. حقیقت این است که ما‌، علاقه به درک بیشتر ابزار‌هایمان ...

Oct 1, 20143 min read

وبلاگ شاهین

221 posts